C语言简单回顾课件

上传人:仙*** 文档编号:243891976 上传时间:2024-10-01 格式:PPTX 页数:35 大小:109.82KB
返回 下载 相关 举报
C语言简单回顾课件_第1页
第1页 / 共35页
C语言简单回顾课件_第2页
第2页 / 共35页
C语言简单回顾课件_第3页
第3页 / 共35页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,源程序的结构特点,1.,一个语言源程序可以由一个或多个源文件组成。,2.,每个源文件可由一个或多个函数组成。,3.,一个源程序不论由多少个文件组成,都有一个且只能有一个,main,函数,即主函数。,4.,源程序中可以有预处理命令,(include,命令仅为其中的一种,),,预处理命令通常应放在源文件或源程序的最前面。,5.,每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号,“,”,之后不能加分号。,6.,标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。,源程序的结构特点1.一个语言源程序可以由一个或多个,语言词汇,标识符,关键字,运算符,分隔符,常量,注释符,语言词汇标识符,1.,标识符,在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。,C,规定,标识符只能是字母,(A,Z,,,a,z),、数字,(0,9),、下划线,(_),组成的字符串,并且其第一个字符必须是字母或下划线。,1.标识符在程序中使用的变量名、函数名、标号等统称为标识,2.,关键字(保留字),关键字是由语言规定的具有特定意义的字符串。用户定义的标识符不应与关键字相同。,语言的关键字分为以下几类:,(1),类型说明符,用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的,int,,,double,等,(2),语句定义符,用于表示一个语句的功能。如,if,else,就是条件语句的语句定义符。,(3),预处理命令字,用于表示一个预处理命令。如前面各例中用到的,include,。,2.关键字(保留字)关键字是由语言规定的具有特定意义的字符,3.,运算符,语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。,4.,分隔符,逗号:主要用在类型说明和函数参数表中,分隔各个变量。,空格:多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的空格符作间隔,否则将会出现语法错误。,例如把,int a;,写成,inta;C,编译器会把,inta,当成一个标识符处理,其结果必然出错。,3.运算符 语言中含有相当丰富的运算符。运算符与变量,函数,5.,常量,C,语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。在后面章节中将专门给予介绍。,6.,注释符,C,语言的注释符是以“,/*,”,开头并以“,*,/,”,结尾的串。在“,/*,”,和“,*,/,”,之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。,5.常量,sizeof,运算符,单目运算符,用以计算操作数在内存中占用的字节数。,操作数可以是两种:,括在圆括号中的类型标识符,一个表达式,比如:,sizeof(char),、,sizeof(Lnode),sizeof运算符单目运算符,用以计算操作数在内存中占用的字,typedef:,类型定义符,C+,允许程序员用关键字,typedef,自己定义一个类型名。,格式为:,typedef,类型符 名字;,类型符可以是系统提供的某一个类型,如,int,、,float,、,struct,等。,typedef:类型定义符C+允许程序员用关键字type,结构体类型,结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。,1.,结构说明和结构变量定义,在,Turbo C,中,结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样,在使用结构变量时要先对其定义。,定义结构变量的一般格式为,:,struct,结构名,类型,变量名,;,类型,变量名,;,.,结构变量,;,结构名是结构的标识符不是变量名。,struct string,char name8;,int age;,char sex2;,char depart20;,float wage1,wage2,wage3,wage4;,;,struct string person;,结构体类型结构是由基本数据类型构成的、并用一个标识符来命名的,构成结构的每一个类型变量称为结构成员,它象数组的元素一样,但数组中元素是以下标来访问的,而,结构是按变量名字来访问成员的。,如果省略结构名,则称之为无名结构,这种情况常常出现在函数内部,用这种结构时前面的例子变成,:,struct,char name8;,int age;,char sex2;,char depart20;,float wage1,wage2,wage3,wage4;,Tianyr,Liuqi;,typedef struct,int a;,char b;,list;,构成结构的每一个类型变量称为结构成员,它象数组的元素一样,指针,指针,一直被认为是,C,语言中的精华。只有掌握了指针,你才能说你学会了,C,语言。,指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。,指针指针,一直被认为是C语言中的精华。只有掌握了指针,你才能,1,指针的类型,语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的 类型:,(1)int*ptr;/,指针的类型是,int*(2)char*ptr;/,指针的类型是,char*(3)int*ptr;/,指针的类型是,int*(4)int(*ptr)3;/,指针的类型是,int(*)3(5)int*(*ptr)4;/,指针的类型是,int*(*)4,1指针的类型语法的角度看,你只要把指针声明语句里的指针名字去,2.,指针所指向的类型。,当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:,(1)int*ptr;/,指针所指向的类型是,int(2)char*ptr;/,指针所指向的的类型是,char(3)int*ptr;/,指针所指向的的类型是,int*(4)int(*ptr)3;/,指针所指向的的类型是,int()3(5)int*(*ptr)4;/,指针所指向的的类型是,int*()4,在指针的算术运算中,指针所指向的类型有很大的作用。指针的类型,(,即指针本身的类型,),和指针所指向的类型是两个概念。,2.指针所指向的类型。当你通过指针来访问指针所指向的内存区时,3.,指针的值,或者叫指针所指向的内存区或地址。,指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在,32,位程序里,所有类型的指针的值都是一个,32,位整数,因为,32,位程序里内存地址全都是,32,位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为,sizeof(,指针所指向的类型,),的一片内存区。,以后,我们说一个指针的值是,XX,,就相当于说该指针指向了以,XX,为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。,3.指针的值,或者叫指针所指向的内存区或地址。指针的值是指针,指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。,以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?该指针指向了哪里?,指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在,4.,指针本身所占据的内存区,指针本身占了多大的内存?你只要用函数,sizeof(,指针的类型,),测一下就知道了。在,32,位平台里,指针本身占据了,4,个字节的长度。,指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。,4.指针本身所占据的内存区指针本身占了多大的内存?你只要用函,(二)指针的算术运算,指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减 运算的意义是不一样的。,例,1,:,1.char a20;2.int*ptr=a;.3.ptr+;,(二)指针的算术运算指针可以加上或减去一个整数。指针的这种运,例,2,:,int array20;int*ptr=array;./,此处略去为整型数组赋值的代码。,.for(i=0;ia;ptr-b;ptr-c;,请问怎样通过指针ptr来访问ss的三个成员变量?答案:,(七)指针和函数的关系,可以把一个指针声明成为一个指向函数的指针。,int fun1(char*,int);int(*pfun1)(char*,int);pfun1=fun1;.int a=(*pfun1)(abcdefg,7);/,通过函数指针调用函数。可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为实参。,(七)指针和函数的关系 可以把一个指针声明成为一个指向函数的,例:,int fun(char*);int a;char str=abcdefghijklmn;a=fun(str);.int fun(char*s)int num=0;for(int i=0;i num+=*s;s+;return num;,这个例子中的函数,fun,统计一个字符串中各个字符的,ASCII,码值之和。前面说了,数组的名字也是一个指针。在函数调用中,当把,str,作为实参传递给形参,s,后,实际是把,str,的值传递给了,s,,,s,所指向的地址就和,str,所指向的地址一致,但是,str,和,s,各自占用各自的存储空间。在函数体内对,s,进行自加,1,运算,并不意味着同时对,str,进行了自加,1,运算。,例:int fun(char*);int a;c,(八)指针类型转换,当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。,例:,float f=12.3;float*fptr=,在上面的例子中,假如我们想让指针,p,指向实数,f,,应该怎么搞?是用下面的语句吗?,p=,(八)指针类型转换 当我们初始化一个指针或给一个指针赋值时,,不对。因为指针,p,的类型是,int*,,它指向的类型是,int,。表达式,&f,的结果是一个指针,指针的类型是,float*,它指向的类型是,float,。两者不一致,直接赋值的方法是不行的。至少在我的,MSVC+6.0,上,对指针的赋值语句要求赋值号两边的类型一致,所指向的类型也一致,其它的编译器上我没试过,大家可以试试。为了实现我们的目的,需要进行,“,强制类型转换,”,:,p=(int*),如果有一个指针,p,,我们需要把它的类型和所指向的类型改为,TYEP*,和,TYPE,,那么语法格式是:,(TYPE*)p,;,这样强制类型转换的结果是一个新指针,该新指针的类型是,TYPE*,,它指向的类型是,TYPE,,它指向的地址就是原指针指向的地址。而原来的指针,p,的一切属性都没有被修改。,不对。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!