欢迎来到天天文库
浏览记录
ID:58715303
大小:405.50 KB
页数:140页
时间:2020-10-04
《第10章 指针类型ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章指针类型10.1指针与指针变量10.2指针与数组10.3指针与字符串10.4指针与结构体10.5指针与链表10.6指针与函数10.7指针作基类型10.8程序设计举例习题十10.1指针与指针变量10.1.1指针变量的定义1.定义方法形式:类型标识符*变量标识符;定义存放指定类型数据地址的指针变量。例如:(1)int*p1,*p2,*p3;定义指向整型数据的指针变量p1、p2、p3。(2)float*q1,*q2,*q3;定义指向实型数据的指针变量q1、q2、q3。(3)char*r1,*r2,*r3;定义指向字符
2、型数据的指针变量r1、r2、r3。(4)structdate{intyear;intmonth;intday;}*t1,*t2,*t3;定义指向structdate类型数据的指针变量t1、t2、t3。说明:(1)指针变量可与普通变量混合定义,指针变量的定义与普通变量的定义用变量名前加“*”区分。例如:inti,*p;/*定义整型变量i,指针变量p*/(2)空指针“NULL”是一特殊的指针数据,表示空地址,相当于整型数据中的0,字符数据中的空格。(3)指针变量只能用于存放指定类型数据的地址。如以上定义的一些指针变量,p1
3、、p2、p3只能存放整型数据的地址,q1、q2、q3只能存放实型数据的地址,r1、r2、r3只能存放字符型数据的地址,t1、t2、t3只能存放structdate型数据的地址。(4)指针变量不能直接赋以具体地址值,不能从键盘输入值。指针变量通过间接赋以相关数据的地址,或调用存储空间分配函数得到值。例如:inti,j,k;int*p1=&i,*p2=&j,*p3=&k;/*p1得到i的地址,p2得到j的地址,p3得到k的地址*/(5)指针类型隐含在指针变量的定义中。例如,在上面定义指针变量p1、p2、p3时,实际上在背后隐含定义了一指
4、向整型数据的指针类型,从形式上可以将int*看成是指向整型数据的指针类型。与数组定义一样,通过typedef可以将指针类型与指针变量分离。例如,上面定义的指针变量p1、p2、p3,可以改用如下形式:typedefint*INTPOINT;INTPOINTp1,p2,p3;(6)指针变量本身占有2字节的存储空间。(7)“void*”指针类型定义的指针变量,不指向哪一种特定类型的数据,在实际使用时通过强制类型转换成指向特定类型的数据。2.指针变量所指向的变量特定类型的数据例如,对指针变量p1、p2、p3,假定已有值,*p1、*p2
5、、*p3代表指针变量p1、p2、p3所指向的数据,也就是p1、p2、p3的值对应的存储单元里存放的数据,称为指针变量所指向的变量,简称指针指向变量。如果指针变量p1、p2、p3分别存放整型变量i、j、k的地址,则p1指向i,p2指向j,p3指向k。图10-1来直观反应指针变量与指针指向变量的关系。图10-1指针指向变量*p1、*p2、*p3相当于整型变量i、j、k。例如:int*p=&i;scanf(“%d”,p);/*等价于scanf(“%d”,&i)*/printf(“%d”,*p);/*等价于printf(“%d”,i)*/
6、10.1.2指针的运算1.引用运算1)取地址运算(&)取地址运算“&”,对指针变量进行取地址运算,可以得到指针变量本身的地址。2)取内容运算(*)取内容运算“*”,前称指针运算,用于获取地址数据对应存储单元的内容。取内容运算的优先级与取地址运算优先级相同,也为第2级,结合性亦为右结合。对指针变量,进行取内容运算可以得到指针变量所指向的数据。取内容运算与取地址运算实质上是一对互逆运算。例如:inta,*p=&a;*(&a)就是a,&(*p)就是p;p指向a,*p与a等价。2.算术运算指针变量可以进行有限的算术运算。1)加减运算指
7、针变量“加上”或“减去”一个整数n,相当于指针变量加上或减去n个指针所指向数据的存储单位,即指针由当前指向位置向后或向前移动n个指针所指向数据的存储单位。加减运算常用于数组的处理。对指向一般数据的指针,加减运算无实际意义。例如:inta[10],*p=a,*x;x=p+3;/*实际上是p加上3*2个字节赋给x,x指向数组的第三个分量*/对于不同基类型的指针,指针变量“加上”或“减去”一个整数n所移动的字节数是不同的。例如:floata[10],*p=a,*x;x=p+3;/*实际上是p加上3*4个字节赋给x,x依然指向数组的第三个分量*
8、/2)自增自减运算指针变量自增、自减运算具有上述运算的特点,但有前置后置、先用后用的考虑,务请小心。例如:inta[10],*p=a,*x;x=p++;/*x指向数组的第一个分量,p指向数组的第二个分
此文档下载收益归作者所有