欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    (12)--9.第九章 指针程序设计基础.ppt

    • 资源ID:96450754       资源大小:3.12MB        全文页数:61页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    (12)--9.第九章 指针程序设计基础.ppt

    2023/11/299.1 9.1 指针概述指针概述指针概述指针概述9.2 9.2 指针的应用指针的应用指针的应用指针的应用第九章第九章 指针指针2023/11/29l本章的研究内容本章的研究内容本章的研究内容本章的研究内容 变量变量变量变量是是是是数据类型数据类型数据类型数据类型、数据值数据值数据值数据值、数据存储空间数据存储空间数据存储空间数据存储空间及及及及数据类型相关操作数据类型相关操作数据类型相关操作数据类型相关操作的一种的一种的一种的一种抽象抽象抽象抽象。变量的。变量的。变量的。变量的访问访问访问访问可以通过可以通过可以通过可以通过变量名变量名变量名变量名,也可以通过,也可以通过,也可以通过,也可以通过变量的地址变量的地址变量的地址变量的地址(变量所在的存储空间位置变量所在的存储空间位置变量所在的存储空间位置变量所在的存储空间位置)。本章研究。本章研究。本章研究。本章研究如何如何如何如何从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及从变量的存储空间地址来访问和操纵变量及其存储空间其存储空间其存储空间其存储空间的问题。的问题。的问题。的问题。l为什么研究指针为什么研究指针为什么研究指针为什么研究指针?C C语言的重要语言的重要语言的重要语言的重要概念概念概念概念和和和和特色特色特色特色,学习的,学习的,学习的,学习的难点难点难点难点。能够能够能够能够建立动态数据结构建立动态数据结构建立动态数据结构建立动态数据结构(如链表、队列等如链表、队列等如链表、队列等如链表、队列等)。可以使程序可以使程序可以使程序可以使程序简洁简洁简洁简洁、灵活灵活灵活灵活和和和和高效高效高效高效。2023/11/29u 9.1.1 9.1.1 指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问指针、地址、直接访问和间接访问1.1.地址地址地址地址(&)l实体实体实体实体在内存空间中都对应有在内存空间中都对应有在内存空间中都对应有在内存空间中都对应有一段存储空间一段存储空间一段存储空间一段存储空间,其其其其存储区域位置存储区域位置存储区域位置存储区域位置用用用用地址地址地址地址来描述。来描述。来描述。来描述。l字节字节字节字节是存储器编址的基本单位。是存储器编址的基本单位。是存储器编址的基本单位。是存储器编址的基本单位。指针指针指针指针就是就是就是就是存存存存储单元储单元储单元储单元的的的的地址编号地址编号地址编号地址编号。l不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。不同实体所占存储空间的大小不同。例如:例如:例如:例如:int int k,ik,i;floatfloat f,gf,g;doubledouble d;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地址编号地址编号地址编号地址编号存储空存储空存储空存储空间和值间和值间和值间和值i ij jk k20012001HH20022002HH20042004HH20002000HH20032003HH20052005HH变量名变量名变量名变量名变量变量变量变量i i的地址为的地址为的地址为的地址为20002000HH变量变量变量变量j j的地址为的地址为的地址为的地址为20022002HH直接访问:直接访问:直接访问:直接访问:通过通过通过通过变量名变量名变量名变量名访问变量。访问变量。访问变量。访问变量。例如:例如:例如:例如:printfprintf(%d,(%d,i i););间接访问:间接访问:间接访问:间接访问:通过通过通过通过变量的地址值变量的地址值变量的地址值变量的地址值访问变量。访问变量。访问变量。访问变量。例如:例如:例如:例如: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*(取值取值取值取值)与与与与&(取地址取地址取地址取地址)操作是操作是操作是操作是相互可逆相互可逆相互可逆相互可逆的:的:的:的:对:对:对:对: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号号号号变量存变量存变量存变量存储空间储空间储空间储空间地址地址地址地址 变量的值变量的值变量的值变量的值成都市人民成都市人民成都市人民成都市人民中路中路中路中路108108号号号号变量的变量的变量的变量的值值值值(地址地址地址地址)张三张三张三张三zhang_x1zhang_x1变量名变量名变量名变量名(房名房名房名房名)红星路红星路红星路红星路7777号号号号zhang_addrzhang_addr变量的值变量的值变量的值变量的值张三张三zhang_x2zhang_x2红星路红星路红星路红星路7777号号号号(a)(a)变量的抽象特性变量的抽象特性变量的抽象特性变量的抽象特性(b)(b)存储值为存储值为存储值为存储值为地址类型地址类型地址类型地址类型(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/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=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=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=%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_n=%u *pt_n=%dn,pt_n,*pt_n);return 0;return 0;/*End of main()*/*End of main()*/自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时自动型指针变量没有赋予初值时是是是是随机整数随机整数随机整数随机整数,故指向,故指向,故指向,故指向该值该值该值该值所代表的所代表的所代表的所代表的实体存储空间实体存储空间实体存储空间实体存储空间(没有意义没有意义没有意义没有意义)。外部或静。外部或静。外部或静。外部或静态指针变量没有初始化时自动为态指针变量没有初始化时自动为态指针变量没有初始化时自动为态指针变量没有初始化时自动为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 n6549665496654946549490906549665496pt_npt_nn n2834283410591059*pt_n*pt_n*pt_n*pt_n随机地址值随机地址值随机地址值随机地址值10591059中的值中的值中的值中的值pt_npt_n指向指向指向指向n n2023/11/29l指针变量类型:指针指针变量类型:指针指针变量类型:指针指针变量类型:指针所指向的变量的类型所指向的变量的类型所指向的变量的类型所指向的变量的类型。也称。也称。也称。也称指针数据类型或指针的基类型。指针数据类型或指针的基类型。指针数据类型或指针的基类型。指针数据类型或指针的基类型。例如:例如:例如:例如:int 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,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;float 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几点注意:几点注意:几点注意:几点注意:不同数据类型所占存储空间长度不同不同数据类型所占存储空间长度不同不同数据类型所占存储空间长度不同不同数据类型所占存储空间长度不同指针变量类型的声明必须指针变量类型的声明必须指针变量类型的声明必须指针变量类型的声明必须通过其他数据类型通过其他数据类型通过其他数据类型通过其他数据类型(指针的基类型指针的基类型指针的基类型指针的基类型)帮助帮助帮助帮助才能完成才能完成才能完成才能完成指针变量的数据类型指针变量的数据类型指针变量的数据类型指针变量的数据类型要与其所要与其所要与其所要与其所指向的实体之指向的实体之指向的实体之指向的实体之数据类型数据类型数据类型数据类型一致一致一致一致不能单独声明与数据类型无关的指针变量。不能单独声明与数据类型无关的指针变量。不能单独声明与数据类型无关的指针变量。不能单独声明与数据类型无关的指针变量。2023/11/294.4.指针操作指针操作指针操作指针操作l指针变量指针变量指针变量指针变量类型不同类型不同类型不同类型不同,操作意义不同操作意义不同操作意义不同操作意义不同。例如例如例如例如,在指针移动上,系统会,在指针移动上,系统会,在指针移动上,系统会,在指针移动上,系统会根据根据根据根据指指指指针针针针数据类型数据类型数据类型数据类型所占存储空间大小所占存储空间大小所占存储空间大小所占存储空间大小进行移进行移进行移进行移动动动动。在取值和赋值操作中,也按数据。在取值和赋值操作中,也按数据。在取值和赋值操作中,也按数据。在取值和赋值操作中,也按数据类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。类型所对应的存储单元大小进行。例如:例如:例如:例如: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例如:例如:例如:例如:#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;/*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)int m,*pt_m;int m,*pt_m;float b,*pt_b;float b,*pt_b;pt_m=&m;pt_m=&m;pt_b=&b;pt_b=&b;scanf(%d,%f,scanf(%d,%f,pt_mpt_m,pt_bpt_b););*pt_m=m*(*pt_b);*pt_m=m*(*pt_b);printf(m is%d,pt_m is%d and*pt_m is%dn,printf(m is%d,pt_m is%d and*pt_m is%dn,m,pt_m,*pt_m);m,pt_m,*pt_m);printf(b is%f,pt_b is%d and*pt_b is%dn,printf(b is%f,pt_b is%d and*pt_b is%dn,m,pt_b,*pt_b);m,pt_b,*pt_b);printf(pt_m+1=%d pt_b+1=%dn,printf(pt_m+1=%d pt_b+1=%dn,pt_m+1,pt_b+1);pt_m+1,pt_b+1);return 0;return 0;/*End of main()*/*End of main()*/利用指针访问其所利用指针访问其所指存储空间的值指存储空间的值u9.1.3 9.1.3 指针型表达式及其引用指针型表达式及其引用指针型表达式及其引用指针型表达式及其引用1.1.指针表达式引用指针表达式引用指针表达式引用指针表达式引用实例实例实例实例?2023/11/29#include#include int main(void)int main(void)int n1=10,n2=20,nTemp,*int n1=10,n2=20,nTemp,*pt_ppt_p,*,*pt_qpt_q,*,*pt_temppt_temp;printfprintf(Before exchange:n1 is%d,n2 is%dn,n1,n2);(Before exchange:n1 is%d,n2 is%dn,n1,n2);nTempnTemp=n1;n1=n2;n2=n1;n1=n2;n2=nTempnTemp;printfprintf(After exchange by n1(After exchange by n1n2:n1 is%d,n2 is%dn,n1,n2);n2:n1 is%d,n2 is%dn,n1,n2);n1=10,n2=20;n1=10,n2=20;pt_ppt_p=&n1;pt_q=&n2;=&n1;pt_q=&n2;nTempnTemp=*=*pt_ppt_p;*;*pt_ppt_p=*=*pt_qpt_q;*;*pt_qpt_q=nTempnTemp;printfprintf(Exchange*(Exchange*pt_ppt_p*pt_qpt_q:n1 is%d,n2 is%dn,n1,n2);:n1 is%d,n2 is%dn,n1,n2);printfprintf(Exchange*(Exchange*pt_ppt_p*pt_qpt_q:*:*pt_ppt_p is%d,is%d,pt_qpt_q is is%dn,*%dn,*pt_ppt_p,*,*pt_qpt_q););n1=10,n2=20;n1=10,n2=20;pt_temppt_temp=pt_p;pt_ppt_p;pt_p=pt_q;pt_qpt_q;pt_q=pt_temppt_temp;printfprintf(Exchange(Exchange pt_ppt_ppt_qpt_q:n1 is%d,n2 is%dn,n1,n2);:n1 is%d,n2 is%dn,n1,n2);printfprintf(Exchange(Exchange pt_ppt_ppt_qpt_q:*:*pt_ppt_p is%d,*is%d,*pt_qpt_q is is%dn,*%dn,*pt_ppt_p,*,*pt_qpt_q););return 0;return 0;/*End of main()*/*End of main()*/通过交换指针值通过交换指针值通过交换指针值通过交换指针值交换交换交换交换n1,n2n1,n2通过一般变量通过一般变量通过一般变量通过一般变量形式交换形式交换形式交换形式交换n1,n2n1,n2通过指针交换通过指针交换通过指针交换通过指针交换n1,n2n1,n2例例例例9-3 9-3 通过指针交换存储空间中的值。通过指针交换存储空间中的值。通过指针交换存储空间中的值。通过指针交换存储空间中的值。2023/11/29102000H202002Hn1n1?2004HnTempn2n2101020201010nTemp=n1;nTemp=n1;n1=n2;n1=n2;n2=nTemp;n2=nTemp;nTemp=*pt_p;nTemp=*pt_p;*pt_p=*pt_q;*pt_p=*pt_q;*pt_q=nTemp;*pt_q=nTemp;102000H202002Hn1n1n2n210102004H2004H2000H2000H2006H2006HnTempnTemp2002H2002H2008H2008Hpt_qpt_qpt_ppt_p202010101010l三种交换方法的逻辑关系图三种交换方法的逻辑关系图三种交换方法的逻辑关系图三种交换方法的逻辑关系图普通变量的值交换普通变量的值交换普通变量的值交换普通变量的值交换基于指针的值交换基于指针的值交换基于指针的值交换基于指针的值交换2023/11/29pt_temp=pt_p;pt_temp=pt_p;pt_p=pt_q;pt_p=pt_q;pt_q=pt_temppt_q=pt_temp;10102000H20202002Hn1n1n2n22000H2000H2006H2006H2002H2002H2008H2008Hpt_ppt_p?200AH200AHpt_temppt_temppt_qpt_q2004H2004HnTempnTemp2000H2000H2002H2002H2000H2000H指针值的交换指针值的交换指针值的交换指针值的交换:注意:第三种方法没有达到将变量注意:第三种方法没有达到将变量注意:第三种方法没有达到将变量注意:第三种方法没有达到将变量n1n1和和和和n2n2的的的的值进行交换的目的!它只是交换了指值进行交换的目的!它只是交换了指值进行交换的目的!它只是交换了指值进行交换的目的!它只是交换了指针变量针变量针变量针变量pt_ppt_p和和和和pt_qpt_q的值。此时,的值。此时,的值。此时,的值。此时,pt_ppt_p指指指指向了向了向了向了n2n2,pt_qpt_q指向了指向了指向了指向了n1n1。2023/11/292.2.指针的转换指针的转换指针的转换指针的转换3.3.指针的算术操作运算指针的算术操作运算指针的算术操作运算指针的算术操作运算l指针和指针和指针和指针和整型表达式整型表达式整型表达式整型表达式的加减。的加减。的加减。的加减。l指针变量的自加、自减。指针变量的自加、自减。指针变量的自加、自减。指针变量的自加、自减。l指针减去指针以获得两个指针之间的指针减去指针以获得两个指针之间的指针减去指针以获得两个指针之间的指针减去指针以获得两个指针之间的存储空存储空存储空存储空间长度间长度间长度间长度值或值或值或值或指针指针指针指针变量的变量的变量的变量的步进单位步进单位步进单位步进单位。l指针之间可以进行比较运算指针之间可以进行比较运算指针之间可以进行比较运算指针之间可以进行比较运算(按整型值按整型值按整型值按整型值)。l作为一种数据类型,不同指针类型之间可以作为一种数据类型,不同指针类型之间可以作为一种数据类型,不同指针类型之间可以作为一种数据类型,不同指针类型之间可以相互转换。当相互转换。当相互转换。当相互转换。当源指针类型源指针类型源指针类型源指针类型转换为转换为转换为转换为目标类型目标类型目标类型目标类型时,时,时,时,指针所指对象的指针所指对象的指针所指对象的指针所指对象的类型类型类型类型和和和和意义意义意义意义与与与与目标指针数据目标指针数据目标指针数据目标指针数据类型相同类型相同类型相同类型相同。l注意:注意:注意:注意:在不能确定指针的数据类型时,可以在不能确定指针的数据类型时,可以在不能确定指针的数据类型时,可以在不能确定指针的数据类型时,可以用用用用voidvoid指针类型。指针类型。指针类型。指针类型。2023/11/29 9.2 9.2 指针的应用指针的应用指针的应用指针的应用u9.2.1 9.2.1 指针与数组指针与数组指针与数组指针与数组u9.2.2 9.2.2 字符数组与指针字符数组与指针字符数组与指针字符数组与指针u9.2.3 9.2.3 指针数组指针数组指针数组指针数组u9.2.4 9.2.4 指针与函数指针与函数指针与函数指针与函数u9.1.4 9.1.4 多级指针问题多级指针问题多级指针问题多级指针问题*2023/11/29一维数组的存储逻辑图:一维数组的存储逻辑图:一维数组的存储逻辑图:一维数组的存储逻辑图:u9.2.1 9.2.1 指针与数组指针与数组指针与数组指针与数组 指针可以指针可以指针可以指针可以指向数组指向数组指向数组指向数组,也可以,也可以,也可以,也可以指向某个元素指向某个元素指向某个元素指向某个元素。指。指。指。指向数组时,它指向第一个元素处。向数组时,它指向第一个元素处。向数组时,它指向第一个元素处。向数组时,它指向第一个元素处。1.1.一维数组与指针一维数组与指针一维数组与指针一维数组与指针l一维数组的指针一维数组的指针一维数组的指针一维数组的指针J指向数组指向数组指向数组指向数组的指针变量。的指针变量。的指针变量。的指针变量。J指向数组元素指向数组元素指向数组元素指向数组元素的指针变量。的指针变量。的指针变量。的指针变量。一维数组的指针变量分为:一维数组的指针变量分为:一维数组的指针变量分为:一维数组的指针变量分为:指向一维数组的指针指向一维数组的指针指向一维数组的指针指向一维数组的指针即指向数组存储空间即指向数组存储空间即指向数组存储空间即指向数组存储空间首地址的指针。首地址的指针。首地址的指针。首地址的指针。int int arr_aarr_a10;10;float float arr_barr_b10;10;int*int*ptArr_aptArr_a,*,*ptElem_aptElem_a;float*float*ptArr_bptArr_b,*,*ptElem_bptElem_b;ptArr_aptArr_a=arr_aarr_a;/*数组数组*/ptArr_bptArr_b=arr_barr_b;ptElem_aptElem_a=&=&arr_aarr_a3;3;/*/*元素元素元素元素*/ptElem_bptElem_b+=4;+=4;ptArr_aptArr_a+;+;ptArr_aptArr_a=&=&arr_aarr_a0;0;2023/11/29arr0arr0arr1arr1arr2arr2arr9arr92000H2000H2002H2002H2004H2004H2012H2012H数数数数组组组组的的的的存存存存储储储储空空空空间间间间int int arrarr10;10;的存储逻辑关系的存储逻辑关系的存储逻辑关系的存储逻辑关系数组的首地址数组的首地址数组的首地址数组的首地址数组名数组名数组名数组名数组数组数组数组的首地址的首地址的首地址的首地址各数组元素的存储空间各数组元素的存储空间各数组元素的存储空间各数组元素的存储空间各数组元素的地址编号各数组元素的地址编号各数组元素的地址编号各数组元素的地址编号2023/11/292.2.通过指针引用数组元素通过指针引用数组元素通过指针引用数组元素通过指针引用数组元素l对数组元素访问的三种基本方法对数组元素访问的三种基本方法对数组元素访问的三种基本方法对数组元素访问的三种基本方法下标访问法下标访问法下标访问法下标访问法地址访问法地址访问法地址访问法地址访问法通过指向数组的指针变量进行访问法通过指向数组的指针变量进行访问法通过指向数组的指针变量进行访问法通过指向数组的指针变量进行访问法例如:例如:例如:例如:*(*(arr+iarr+i)访问访问访问访问arrarr的第的第的第的第i+1i+1个元素。个元素。个元素。个元素。例如:例如:例如:例如:假设假设假设假设pt_arrpt_arr与数组与数组与数组与数组arrarr有相同数据有相同数据有相同数据有相同数据类型,且已指向类型,且已指向类型,且已指向类型,且已指向arrarr。对数组第。对数组第。对数组第。对数组第i+1i+1个元个元个元个元素的访问有:素的访问有:素的访问有:素的访问有:pt_arrpt_arr i i 和和和和*(pt_arr+ipt_arr+i)两两两两种形式。种形式。种形式。种形式。注意注意注意注意1 1:arrarr11是第二个元素,是第二个元素,是第二个元素,是第二个元素,arrarr i i 访问访问访问访问arrarr第第第第i+1i+1个元素。个元素。个元素。个元素。2023/11/29注意注意注意注意2 2:数组首地址是常量,:数组首地址是常量,:数组首地址是常量,:数组首地址是常量,值不可改变。指针型值不可改变。指针型值不可改变。指针型值不可改变。指针型变量的值可改变。变量的值可改变。变量的值可改变。变量的值可改变。int arr10,*pt_arr,i;int arr10,*pt_arr,i;pt_arr=arr;pt_arr=arr;for(;pt_arrarr+10;for(;pt_arrarr+10;pt_arr+pt_arr+)printf(%d,printf(%d,*pt_arr*pt_arr););int arr10;int arr10;pt_arr=arr;pt_arr=arr;for(;arr(pt_arr+10);for(;arr(pt_arr+10);arr+arr+)printf(%d,*arr);printf(%d,*arr);int arr10,i;int arr10,i;pt_arr=arr;pt_arr=arr;for(i=0;i10;i+)for(i=0;i10;i+)printf(%d,printf(%d,*(arr+i)*(arr+i););l结论:结论:结论:结论:引用数组元素地址的形式:引用数组元素地址的形式:引用数组元素地址的形式:引用数组元素地址的形式:&arrarr i i,pt_arr+ipt_arr+i或或或或arr+iarr+i引用数组元素值的形式:引用数组元素值的形式:引用数组元素值的形式:引用数组元素值的形式:arrarr i i,pt_arrpt_arr i i,*(,*(pt_arr+ipt_arr+i),*(),*(arr+iarr+i)2023/11/29注意注意注意注意3 3:指针变量指向数组时,要特别注:指针变量指向数组时,要特别注:指针变量指向数组时,要特别注:指针变量指向数组时,要特别注意越界问题。意越界问题。意越界问题。意越界问题。例例例例9-5 9-5 用一级指针变量输出数组用一级指针变量输出数组用一级指针变量输出数组用一级指针变量输出数组arrarr的元素值。的元素值。的元素值。的元素值。#include /*程序程序1*/int main(void)int*pt,i,arr10;pt=arr;pt=arr;for(i=0;i10;i+)scanf(%d,pt+);printf(n);for(i=0;i10;i+,pt+)printf(%d,*pt*pt);return 0;/*End of main()*/第一次访第一次访问就超界问就超界!ptptarr0arr9ptpt实际输出结果:实际输出结果:arr10arr19#include/*程序程序2*/int main(void)int*pt,i,arr10;ptpt=arrarr;for(i=0;i10;i+)scanf(%d,pt+);printf(n);ptpt=arrarr;for(i=0;i10;i+,pt+)printf(%d,*ptpt);return 0;/*End of main()*/重新指重新指向向arr正确的程正确的程正确的程正确的程序代码序代码序代码序代码2023/11/29注意注意注意注意4 4:指针变量使用的其他问题。:指针变量使用的其他问题。:指针变量使用的其他问题。:指针变量使用的其他问题。设设设设ptpt为指向一维数组的指针变量,有:为指向一维数组的指针变量,有:为指向一维数组的指针变量,有:为指向一维数组的指针变量,有:Jptpt+或或或或ptpt+=1+=1使使使使ptpt指向数组的下一元素指向数组的下一元素指向数组的下一元素指向数组的下一元素J*和和和和+的优先级相同,且都是右结合,故的优先级相同,且都是右结合,故的优先级相同,且都是右结合,故的优先级相同,且都是右结合,故*ptpt+*(*(ptpt+)+)J*(*(ptpt+)+)和和和和*(+(+ptpt)是指针自加是指针自加是指针自加是指针自加例例例例9-6 9-6 利用指针变量从键盘输入利用指针变量从键盘输入利用指针变量从键盘输入利用指针变量从键盘输入1010个数,找出个数,找出个数,找出个数,找出最大数并显示出来。最大数并显示出来。最大数并显示出来。最大数并显示出来。J(*(*ptpt)+)+和和和和+(*+(*ptpt)是对是对是对是对ptpt所指存储单元值的自所指存储单元值的自所指存储单元值的自所指存储单元值的自加,自减与此相似加,自减与此相似加,自减与此相似加,自减与此相似#include int main(void)int arr10,max,i,*pt=arr;*pt=ar

    注意事项

    本文((12)--9.第九章 指针程序设计基础.ppt)为本站会员(奉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开