欢迎来到天天文库
浏览记录
ID:50043608
大小:446.50 KB
页数:158页
时间:2020-03-08
《C语言程序设计 教学课件 作者 孟庆昌 第07章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章指针C语言与其他程序设计语言的一个主要区别是指针的广泛应用。7.1什么是指针7.2指针变量的定义7.3指针变量的引用7.4指针变量的运算7.5指针变量和数组7.6指针作为函数参数7.7指向字符串的指针变量7.8指向多维数组的指针和指针变量7.9指针数组7.10指向指针的指针7.11指向函数的指针变量7.12返回指针的函数7.13指向void量的指针变量7.14动态存储分配7.15命令行参数7.1什么是指针整个内存由连续的存储单元组成,每个存储单元都有惟一的地址编号。内存地址的号码是统一编排的,从0到所装内存
2、的最大值。操作系统要占用一部分内存空间,这是系统内存区。当你要运行自己的程序时,相应的程序代码(完成各种动作的机器指令)和数据(程序所用的信息)也必须装入到内存中,占用内存的用户区。在源程序中定义的变量,在编译时就为它们分配相应的内存单元。例如:intx;floatt;x=10;t=0.618;经编译后它们在内存中的存放示意情况如图7-1所示。程序中不同类型的数据要占用的内存空间的大小是不同的。在执行程序时,CPU并不直接识别变量的名称,但它知道各变量在内存的地址。所以,在机器内部对变量值的存取是通过各自的地址进
3、行的。这种在编程时直接按变量名来取变量值的方式称为“直接访问”方式。对变量的访问也有“间接访问”方式,就是把一个变量(如x)的地址存放在另一个内存单元中(设为1020),那么,我们就可以通过访问内存单元1020,得到x的地址即1000,再按地址1000存取其中内容,从而得到x的值。如图7-2所示。指针是C语言中的一种数据类型,它表示对应数据在内存中存储单元的地址。简言之,指针是内存地址的别名。如果一个指针变量的值恰好是另一个变量的内存地址,那么,就说该指针变量指向相应的变量。7.2指针变量的定义指针变量定义的一般
4、形式是:类型*指针变量名;例如:int*p;/*p是指向整型变量的指针变量*/char*next;/*next是指向字符型变量的指针变量*/float*fp;/*fp是指向浮点型变量的指针变量*/double*dp;/*dp是指向双精度型变量的指针变量*/对指针变量的定义应注意以下几点:①指针变量名之前的“*”号意味着“指向……的指针”,就是说它所修饰的变量是指针变量。②指针变量是用它们所指向的对象的类型来表征的。③一个指针变量被定义之后,它所指向对象的类型就确定了。所以,在一般情况下,一个指针变量只能指向由定义
5、限定的同一类型的变量。例如:intx,y,*p;doublea;p=&x;p=&y;不能把a的地址赋给p:p=&a。④从语法上讲,指针变量可以指向任何类型的对象,包括指向数组、指向别的指针变量、指向函数或指向结构变量等,从而可以表示复杂的数据类型。例如,有下列数据说明:char(*ptr)[5];int**ip;int*fip();int(*pti)();int*(*pfpi)();指针变量的类型就是把相应数据说明中的标识符(即变量名)去掉后所余下的部分。char(*ptr)[5]。⑤指针变量也占用内存单元,而且
6、所有指针变量占用内存单元的数量都是相同的。就是说,不管是指向何种对象的指针变量,它们占用内存的字节数都是一样的,并且要足够把程序中所能用到的最大地址表示出来(通常是一个机器字长)。例如:inta,*ap;double*dp,var;7.3指针变量的引用7.3.1&运算符&是单目运算符,其作用是取出操作对象在内存单元的地址。它所作用的操作对象在内存中要有确切的单元地址。&不能作用于表达式或者常量。inta,b;doublevar;charname[10];&a,&b,&var,&name[0]~&name[9]等表
7、达式都是合法的。然而,表达式&(a+1),&(a+b),&5,&(var*3.14),&name都是非法的。另外,&运算符也不能作用于寄存器类变量。7.3.2*运算符运算符*也是单目运算符,其作用是访问操作对象所指向的变量。它所作用的操作对象必须是指针变量或指针表达式。int*p;p=&a;*p=99;在程序中使用指针变量进行间接访问之前,必须给它们赋初值,使它们指向相应的变量。不要误认为指针变量一经定义就与某个同类型的变量建立了“指向”关系。*pd+=(double)*p1;p1=&a;*p1=(short)*
8、p;p2=p1;*p2/=3;++p2;++*p2;通过上例可以看到:①指针是一种新的数据类型,指针变量的类型是以其所指对象的类型来区分的。②指针变量的值是它所指对象在内存中的地址,利用运算符&可得到一个变量的地址。③利用指针可以间接访问对象,这是通过运算符*实现的。④指针变量不是整型量,它的运算受到严格限制。应注意,(*p2)++与*p2++的功能是不同的。7.4指针变
此文档下载收益归作者所有