C语言教程课件第七章 指针.ppt

C语言教程课件第七章 指针.ppt

ID:55827799

大小:109.50 KB

页数:23页

时间:2020-06-09

C语言教程课件第七章 指针.ppt_第1页
C语言教程课件第七章 指针.ppt_第2页
C语言教程课件第七章 指针.ppt_第3页
C语言教程课件第七章 指针.ppt_第4页
C语言教程课件第七章 指针.ppt_第5页
资源描述:

《C语言教程课件第七章 指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第7章指针7.1指针的概念7.2指针变量7.3函数间传递地址值7.1概念1.数据在内存中的存储方式:按数据类型给在内存为其分配一定数量的存储单元(字节)。2.内存单元的地址:内存单元的编号,与变量名对应。3.内存单元的内容:即变量的值。例如有定义:inta;charc;floatx;变量a,c,x的内存分配情况:axc4.变量的“直接访问”方式:按变量的地址(即变量名)存取变量值的方式。(见下图)i20003直接访问:3i20002000pointer间接访问方式示意图:将变量的地址放在另一个内存单元中,先到另一个内存单元中取得变量的地址,再由变量的地址找到变量并进行数据存取(见下图)

2、。5.变量的“间接访问”方式内存用户数据区示意图:变量pointer为指针变量,存放的是变量i的内存地址,我们说pointer指向i。369.....2000...变量i变量j变量k变量pointer3010200020042008变量的值用10进制示意内存地址6.指针的概念:一个变量的地址称为该变量的指针。8.2指针与变量一.指针变量的定义和指针变量的基类型1.定义方式:类型标识符*指针变量名;float*p1;(定义了p1为指向实型变量的指针变量)char*p2;(定义了p2为指向字符型变量的指针变量)标识符前面的“*”,表示该变量为指针变量。但指针变量名是*后面的名字(不包括“*

3、”)。该指针所指向变量的类型成为指针变量的基类型。3.说明2.指针变量的三要素:指针变量的基类型:和其所指变量的类型一致;指针变量的值:另一个变量在内存的地址;指针变量的名字:起法同普通变量。指针变量名=某一地址;二.指针变量的赋值方式1:指针变量名=&变量名;方式2:指针变量名=另一已经赋值的指针变量;方式3:通过调用库函数malloc和calloc在内存中开辟动态存储单元;方式4:还可以给指针变量赋NULL值。i的地址pi的值iqi的地址例如:inti,*p,*q,*r,*t;p=&i;/*方式1*/q=p;/*方式2*/r=malloc(4);t=NULL;示意图三.指针的运算1

4、.移动指针对指针变量加上或减去一个整数、或通过赋值运算,使指针指向相邻的存储单元在p++中,1不代表一个字节,而是一个存储单元,具体字节数由指针的基类型决定2.指针的比较和相减相减得一整数,代表两指针所指存储单元之间相距的单元数,不是字节数。3.两个运算符*:求其后内存地址中的内容&:求变量的内存地址.[例]main(){inta,b;int*p1,*p2;a=100;b=10;p1=&a;p2=&b;printf("%d,%d",a,b);printf("%d,%d",*p1,*p2);}程序运行结果:100,10100,10再例:由下列图(a)形式,&aP1&bP2ab图(

5、a)图(b)执行语句:p2=&*p1后,变为图(b)形式。这时:*p1为a,*p2为a,p1=p2=&a&ap1&ap2ab思考:1.若已执行了“p1=&a”,则:“&*p1”的含意是什么?2.*&a的含意是什么?3.(*p1)++相当于什么?[例]对输入的两个整数按大小顺序输出main(){int*p1,*p2,*p,a,b;a=5;b=9;p1=&a;p2=&b; ①&a59p1p2&bab(1初始)2执行p=p1后&a5p1a&b9p2b&apif(a

6、x=%d,min=%d",*p1,*p2);}&b&b3执行p2=p1后&ap9p1p25ab4执行p2=p后5&a&b&a9pp1p2ab------指向指针变量的指针.定义形式:类型**变量名;例如:inti,*p,**q;i=30;p=&i;q=&p;100020001000100120003000ipq内存示意图:四.指针的指针7.3函数之间传递地址值看下面的程序intsum(inta,intb){returna+b;}voidadd1(inta,intb,intc){c=a+b;}voidadd2(inta,intb,int*c){*c=a+b;}voidmain(){i

7、ntx=3,y=4,z=5;z=sum(x,y);printf(“sum:z=%d”,z);x=3,y=4,z=5;add1(x,y,z);printf(“add1:z=%d”,z);x=3,y=4,z=5;add2(x,y,&z);printf(“add2:z=%d”,z);}考虑函数调用时,三个函数的参数传递情况内存中变量的值的变化情况voidswap1(inta,intb){intt;t=a;a=b;b=t;}voidswap

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。