(12)--9.第九章 指针程序设计基础.ppt
《(12)--9.第九章 指针程序设计基础.ppt》由会员分享,可在线阅读,更多相关《(12)--9.第九章 指针程序设计基础.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/11/299.1 9.1 指针概述指针概述指针概述指针概述9.2 9.2 指针的应用指针的应用指针的应用指针的应用第九章第九章 指针指针2023/11/29l本章的研究内容本章的研究内容本章的研究内容本章的研究内容 变量变量变量变量是是是是数据类型数据类型数据类型数据类型、数据值数据值数据值数据值、数据存储空间数据存储空间数据存储空间数据存储空间及及及及数据类型相关操作数据类型相关操作数据类型相关操作数据类型相关操作的一种的一种的一种的一种抽象抽象抽象抽象。变量的。变量的。变量的。变量的访问访问访问访问可以通过可以通过可以通过可以通过变量名变量名变量名变量名,也可以通过,也可以通过,
2、也可以通过,也可以通过变量的地址变量的地址变量的地址变量的地址(变量所在的存储空间位置变量所在的存储空间位置变量所在的存储空间位置变量所在的存储空间位置)。本章研究。本章研究。本章研究。本章研究如何如何如何如何从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及其存储空间其存储空间其存储空间其存储空间的问题。的问题。的问题。的问题。l为什么研究指针为什么研究指针为什么研究指针为什么研究指针?C C语言的重要语言的重要语言的重要语言的重要概念概念概念概念和和和和特色特色特色特色,学习的,学习的,学
3、习的,学习的难点难点难点难点。能够能够能够能够建立动态数据结构建立动态数据结构建立动态数据结构建立动态数据结构(如链表、队列等如链表、队列等如链表、队列等如链表、队列等)。可以使程序可以使程序可以使程序可以使程序简洁简洁简洁简洁、灵活灵活灵活灵活和和和和高效高效高效高效。2023/11/29u 9.1.1 9.1.1 指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问1.1.地址地址地址地址(&)l实体实体实体实体在内存空间中都对应有在内存空间中都对应有在内存空间中都对应有在内存空间中都对应有一段存储空间一段存储空间一段存储
4、空间一段存储空间,其其其其存储区域位置存储区域位置存储区域位置存储区域位置用用用用地址地址地址地址来描述。来描述。来描述。来描述。l字节字节字节字节是存储器编址的基本单位。是存储器编址的基本单位。是存储器编址的基本单位。是存储器编址的基本单位。指针指针指针指针就是就是就是就是存存存存储单元储单元储单元储单元的的的的地址编号地址编号地址编号地址编号。l不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。例如:例如:例如:例如:int int k,ik,i;floatfloat f,gf,g;doubledouble d;
5、d;l实体的地址编码实体的地址编码实体的地址编码实体的地址编码以所占存储空间以所占存储空间以所占存储空间以所占存储空间第一个字节第一个字节第一个字节第一个字节的地址编码的地址编码的地址编码的地址编码(实体首地址实体首地址实体首地址实体首地址)为准。为准。为准。为准。9.1 9.1 指针概述指针概述指针概述指针概述取实体地址取实体地址取实体地址取实体地址值的操作符值的操作符值的操作符值的操作符2023/11/29例如:例如:例如:例如:int int i i,j j,k;,k;i=3,j=6,k=9;i=3,j=6,k=9;3 36 69 9地址编号地址编号地址编号地址编号存储空存储空存储空存储
6、空间和值间和值间和值间和值i ij jk k20012001HH20022002HH20042004HH20002000HH20032003HH20052005HH变量名变量名变量名变量名变量变量变量变量i i的地址为的地址为的地址为的地址为20002000HH变量变量变量变量j j的地址为的地址为的地址为的地址为20022002HH直接访问:直接访问:直接访问:直接访问:通过通过通过通过变量名变量名变量名变量名访问变量。访问变量。访问变量。访问变量。例如:例如:例如:例如:printfprintf(%d,(%d,i i););间接访问:间接访问:间接访问:间接访问:通过通过通过通过变量的地址
7、值变量的地址值变量的地址值变量的地址值访问变量。访问变量。访问变量。访问变量。例如:例如:例如:例如:printfprintf(%d,(%d,*(&(&i i););取地址所指取地址所指取地址所指取地址所指存储空间中存储空间中存储空间中存储空间中值的操作符值的操作符值的操作符值的操作符2023/11/29l指针就是地址指针就是地址指针就是地址指针就是地址。100100int k=100int k=100;&k&k&k&kint*pk;int*pk;pk=&k;pk=&k;2.2.指针指针指针指针(*)&pk&pk*(取值取值取值取值)与与与与&(取地址取地址取地址取地址)操作是操作是操作是操作
8、是相互可逆相互可逆相互可逆相互可逆的:的:的:的:对:对:对:对:int k,*pk;int k,*pk;pk=&k;*pk=k;pk=&k;*pk=k;有:有:有:有:*(&*(&k)k)*pk*pkk k&(*pk)&(*pk)&k&kpkpkpkpk是指针变量,是指针变量,是指针变量,是指针变量,它存放它存放它存放它存放k k的地址的地址的地址的地址例如:例如:例如:例如:k kpkpk2023/11/293.3.日常生活中的指针实例日常生活中的指针实例日常生活中的指针实例日常生活中的指针实例成都市人民成都市人民成都市人民成都市人民中路中路中路中路108108号号号号变量存变量存变量存变
9、量存储空间储空间储空间储空间地址地址地址地址 变量的值变量的值变量的值变量的值成都市人民成都市人民成都市人民成都市人民中路中路中路中路108108号号号号变量的变量的变量的变量的值值值值(地址地址地址地址)张三张三张三张三zhang_x1zhang_x1变量名变量名变量名变量名(房名房名房名房名)红星路红星路红星路红星路7777号号号号zhang_addrzhang_addr变量的值变量的值变量的值变量的值张三张三zhang_x2zhang_x2红星路红星路红星路红星路7777号号号号(a)(a)变量的抽象特性变量的抽象特性变量的抽象特性变量的抽象特性(b)(b)存储值为存储值为存储值为存储值
10、为地址类型地址类型地址类型地址类型(c)(c)根据根据根据根据zhang_addrzhang_addr中值,中值,中值,中值,可以访问可以访问可以访问可以访问zhang_x2zhang_x2中的值中的值中的值中的值图图9-1 变量与地址、指针的关系变量与地址、指针的关系*zhang_addrzhang_addrzhang_x2zhang_x2张三张三张三张三&zhang_x2zhang_x2zhang_addrzhang_addr红星路红星路红星路红星路7777号号号号&zhang_addrzhang_addr成都市人民中路成都市人民中路成都市人民中路成都市人民中路108108号号号号2023
11、/11/291.1.指针变量的声明与赋值指针变量的声明与赋值指针变量的声明与赋值指针变量的声明与赋值 l声明格式:声明格式:声明格式:声明格式:数据类型数据类型数据类型数据类型 *指针变量名指针变量名指针变量名指针变量名;例如:例如:例如:例如:int int i i,*p;,*p;/*/*普通普通普通普通变量变量变量变量i i,指针指针指针指针变量变量变量变量p*/p*/p=&p=&i i;/*/*将将将将i i的的的的地址赋值地址赋值地址赋值地址赋值给给给给p p*/*/*p=p=8 8;/*/*通过指针访问通过指针访问通过指针访问通过指针访问i i,相当于,相当于,相当于,相当于i i=
12、8*/=8*/u9.1.2 9.1.2 指针、变量、指针变量和指针操作指针、变量、指针变量和指针操作指针、变量、指针变量和指针操作指针、变量、指针变量和指针操作 int int main(main(voidvoid)int int nA=5,nB=10,nCnA=5,nB=10,nC;nC=nA+nBnC=nA+nB;printf(printf(%d,%d,%d%d,%d,%d,nAnA,nBnB,nCnC););return 0;return 0;/*End of main()*/*End of main()*/int int main(main(voidvoid)intint nAnA=5
13、=5,nB=10nB=10,nCnC,*pc*pc;pc=&pc=&nCnC;nCnC=nA+nBnA+nB;printfprintf(%d,%d,%d%d,%d,%d,nAnA,nBnB,*pc*pc););return 0;return 0;/*End of main()*/*End of main()*/#include#include /*/*exam0901.cexam0901.c*/*/int main(void)int main(void)int int i i=3,j=6,k=9;=3,j=6,k=9;printfprintf(i i=%d j=%d k=%dn,=%d j=%
14、d k=%dn,*(&*(&i i),j j,k k););return 0;return 0;/*End of main()*/*End of main()*/2023/11/29#include#include int main(void)int main(void)int int*pt_n*pt_n,n=90;,n=90;printf(pt_n=%u *pt_n=%dn,pt_n,*pt_n);printf(pt_n=%u *pt_n=%dn,pt_n,*pt_n);pt_n=pt_n=&n&n;printf(pt_n=%u *pt_n=%dn,pt_n,*pt_n);printf(pt
15、_n=%u *pt_n=%dn,pt_n,*pt_n);return 0;return 0;/*End of main()*/*End of main()*/自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时是是是是随机整数随机整数随机整数随机整数,故指向,故指向,故指向,故指向该值该值该值该值所代表的所代表的所代表的所代表的实体存储空间实体存储空间实体存储空间实体存储空间(没有意义没有意义没有意义没有意义)。外部或静。外部或静。外部或静。外部或静态指针变量没有初始化时自动为态指针变量没有初始化时自动为态指针变量没有初始化时自动为态
16、指针变量没有初始化时自动为0 0或或或或NULLNULL(即即即即空指针空指针空指针空指针)。输出结果输出结果输出结果输出结果:pt_npt_n=1059 1059 *pt_npt_n=28342834pt_npt_n=65496 *=65496 *pt_npt_n=90=90没有初始化没有初始化没有初始化没有初始化的输出结果的输出结果的输出结果的输出结果指向变量指向变量指向变量指向变量n n后后后后的输出结果的输出结果的输出结果的输出结果包含包含包含包含NULLNULL宏定义宏定义宏定义宏定义10591059654946549490906549665496pt_npt_nn n6549665
17、496654946549490906549665496pt_npt_nn n2834283410591059*pt_n*pt_n*pt_n*pt_n随机地址值随机地址值随机地址值随机地址值10591059中的值中的值中的值中的值pt_npt_n指向指向指向指向n n2023/11/29l指针变量类型:指针指针变量类型:指针指针变量类型:指针指针变量类型:指针所指向的变量的类型所指向的变量的类型所指向的变量的类型所指向的变量的类型。也称。也称。也称。也称指针数据类型或指针的基类型。指针数据类型或指针的基类型。指针数据类型或指针的基类型。指针数据类型或指针的基类型。例如:例如:例如:例如:int
18、int i i=8,*p;=8,*p;p=&p=&i i;/*p/*p为为为为整型整型整型整型指针变量指针变量指针变量指针变量*/又如:又如:又如:又如:float*p1;float*p1;/*p1 /*p1为为为为浮点浮点浮点浮点型指针变量型指针变量型指针变量型指针变量*/注意:遵循注意:遵循注意:遵循注意:遵循“先声明、定义,后使用先声明、定义,后使用先声明、定义,后使用先声明、定义,后使用”准则。准则。准则。准则。2.2.指针变量的类型指针变量的类型指针变量的类型指针变量的类型#include#includeint main(void)int main(void)int int*pt_n
19、,npt_n,n=90;=90;printfprintf(pt_npt_n=%u *=%u *pt_npt_n=%dn,=%dn,pt_npt_n,*,*pt_npt_n);pt_npt_n=&n;=&n;printfprintf(pt_npt_n=%u *=%u *pt_npt_n=%dn,=%dn,pt_npt_n,*,*pt_npt_n););return 0;return 0;/*End of main()*/*End of main()*/整型指针变量整型指针变量整型指针变量整型指针变量2023/11/29例如:例如:例如:例如:int int*pt_i,ipt_i,i=3;=3;f
20、loat float*pt_fA,fApt_fA,fA=6;=6;pt_ipt_i=&=&i i;/*/*整型指针整型指针整型指针整型指针*/pt_fApt_fA=&=&fAfA;/*/*浮点型指针浮点型指针浮点型指针浮点型指针*/3.3.指针变量与一般变量的关系指针变量与一般变量的关系指针变量与一般变量的关系指针变量与一般变量的关系?pt_ipt_ipt_fApt_fA3 36.06.0i ifAfA2000H2000H2100H2100H2000H2000H2100H2100H2023/11/29l几点注意:几点注意:几点注意:几点注意:不同数据类型所占存储空间长度不同不同数据类型所占存储
21、空间长度不同不同数据类型所占存储空间长度不同不同数据类型所占存储空间长度不同指针变量类型的声明必须指针变量类型的声明必须指针变量类型的声明必须指针变量类型的声明必须通过其他数据类型通过其他数据类型通过其他数据类型通过其他数据类型(指针的基类型指针的基类型指针的基类型指针的基类型)帮助帮助帮助帮助才能完成才能完成才能完成才能完成指针变量的数据类型指针变量的数据类型指针变量的数据类型指针变量的数据类型要与其所要与其所要与其所要与其所指向的实体之指向的实体之指向的实体之指向的实体之数据类型数据类型数据类型数据类型一致一致一致一致不能单独声明与数据类型无关的指针变量。不能单独声明与数据类型无关的指针变
22、量。不能单独声明与数据类型无关的指针变量。不能单独声明与数据类型无关的指针变量。2023/11/294.4.指针操作指针操作指针操作指针操作l指针变量指针变量指针变量指针变量类型不同类型不同类型不同类型不同,操作意义不同操作意义不同操作意义不同操作意义不同。例如例如例如例如,在指针移动上,系统会,在指针移动上,系统会,在指针移动上,系统会,在指针移动上,系统会根据根据根据根据指指指指针针针针数据类型数据类型数据类型数据类型所占存储空间大小所占存储空间大小所占存储空间大小所占存储空间大小进行移进行移进行移进行移动动动动。在取值和赋值操作中,也按数据。在取值和赋值操作中,也按数据。在取值和赋值操作
23、中,也按数据。在取值和赋值操作中,也按数据类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。例如:例如:例如:例如:int*pt_m,m;int*pt_m,m;float*pt_y,y;float*pt_y,y;pt_m=&m;pt_m=&m;pt_y=&y;pt_y=&y;.pt_m+;pt_m+;.pt_y+;pt_y+;.pt_m+pt_m=2002Hpt_m=2000Hpt_y=2010Hpt_y+pt_y+pt_y=2014H2000Hm2002H2010Hy2014H2023/11/29例如:例如:例如:例如:#
24、include#include int main(void)int main(void)int*pt_nint*pt_n,n=90;,n=90;pt_n=&npt_n=&n;n=*pt_n+20n=*pt_n+20;printf(pt_n=%d n=%dn,pt_n,printf(pt_n=%d n=%dn,pt_n,n n););printf(pt_n=%d n=%dn,pt_n,printf(pt_n=%d n=%dn,pt_n,*pt_npt_n););printf(&pt_n=%un,printf(&pt_n=%un,&pt_n&pt_n););return 0;return 0;/*
25、End of main()*/*End of main()*/运行结果:运行结果:运行结果:运行结果:pt_npt_n=65496 =65496 n=110n=110pt_npt_n=65496 =65496 n=110n=110&pt_npt_n=6549465494变量名变量名变量名变量名?654949065496pt_nn65496654949065496pt_nnpt_n=&n;pt_n=&n;654966549411065496pt_nnn=*pt_n+20;n=*pt_n+20;首地址首地址首地址首地址2023/11/29int main(void)int main(void)in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12-9.第九章 指针程序设计基础 12 第九 指针 程序设计 基础
限制150内