C语言程序设计教程第07章地址和指针.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计教程第07章地址和指针.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程第07章地址和指针.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 地址和指针地址和指针7.1 地址和指针的概念地址和指针的概念7.2 指针变量的定义和指针变量的基类型指针变量的定义和指针变量的基类型7.3 给指针变量赋值给指针变量赋值7.4 对指针变量的操作对指针变量的操作7.5 指针在函数方面的应用指针在函数方面的应用7.1 地址和指针的概念地址和指针的概念7.1.17.1.1地址和指针的概念地址和指针的概念1“地址地址”的概念的概念2存储单元存储单元“地址地址”的表示的表示3“指针指针”的概念的概念7.1.27.1.2为什么使用指针为什么使用指针使使用用指指针针,实实现现了了“间间接接访访问问”变变量量,这这只只是是一一个个过过程程,其其实实
2、质质是是可可以以达达到到方方便便地地引引用用数数组组,提提高高计计算算机机的的运运行行效效率率,调调用用函函数数时时可可以以修修改改或或返返回回多多个个参参数数值值,还还可可以以描描述述更更复复杂杂的的数数据据结结构构,为为了了加加深深读读者者对对指指针针重重要要性性的的理理解解,下下面面我我们们举举一函数调用的实例。一函数调用的实例。例例7.17.1 欲想调用欲想调用fun函数,计算出两个函数,计算出两个数相加和相减的值,然后在数相加和相减的值,然后在main函数中显函数中显示结果。示结果。程序如下:程序如下:fun(int x,int y)int add=0,sub=0;add=x+y;s
3、ub=xy;main()int a,b,add=0,sub=0;scanf(%d%d ,&a,&b);printf(a=%d,b=%d n ,a,b);fun(a,b);printf(%d+%d=%d n ,a,b,add);printf(%d%d=%d n ,a,b,sub);假设程序运行时给变量假设程序运行时给变量a输入输入8,给变,给变量量b输入输入5,程序运行结果:,程序运行结果:a=8,b=58+5=08 5=0程序运行结果与我们程序运行结果与我们“想象想象”的不一致,的不一致,为什么呢?其原因是为什么呢?其原因是fun 函数中变量函数中变量add和和sub与与main函数中变量函数
4、中变量add和和sub各自占用各自占用自己的存储单元,因此自己的存储单元,因此fun函数中变量函数中变量add存放的两个数的求和值无法传回到存放的两个数的求和值无法传回到main函函数的变量数的变量add中,同理,中,同理,fun函数中变量函数中变量sub存放的两个数的相减值也无法传回到存放的两个数的相减值也无法传回到main函数的变量中。下面我们修改一下源程序,函数的变量中。下面我们修改一下源程序,借助指针,将借助指针,将fun函数中运行的结果传回到函数中运行的结果传回到main函数中。函数中。7.2 指针变量的定义和指指针变量的定义和指针变量的基类型针变量的基类型7.2.17.2.1 指指
5、针针变变量量的的定定义义和和指指针变量的基类型针变量的基类型定义指针变量的一般形式如下:定义指针变量的一般形式如下:类型名类型名 *指针变量名指针变量名1,*指针变量名指针变量名2,;例如:例如:int *pi,*pj;以上定义语句中,以上定义语句中,pi和和pj都是用户标都是用户标识符,表示具体的变量名,现在每个变量识符,表示具体的变量名,现在每个变量名前加一星号名前加一星号“*”说明符,用来说明所定说明符,用来说明所定义的变量是指针变量。义的变量是指针变量。注意:变量名前的星号注意:变量名前的星号“*”不可省略,不可省略,若省略了星号若省略了星号“*”说明符,就变成了普通说明符,就变成了普
6、通整型变量。整型变量。int是数据类型名,在这里,说明了是数据类型名,在这里,说明了pi和和pj是两个指向整型(是两个指向整型(int类型)变量的指类型)变量的指针,也就是说变量针,也就是说变量pi和和pj中只能存放中只能存放int类类型变量的地址,这时我们称型变量的地址,这时我们称int是指针变量是指针变量pi和和pj的基类型。又如:的基类型。又如:double *pd;char *s1,*s2;在这里定义了三个指针变量在这里定义了三个指针变量pd、s1和和s2,其中指针变量其中指针变量pd的基类型为的基类型为double类类型,在指针变量型,在指针变量pd中,只能存放中,只能存放doubl
7、e类类型变量的地址,指针变量型变量的地址,指针变量s1和和s2的基类型的基类型为为char类型,在指针变量类型,在指针变量s1和和s2中只能存中只能存放放char类型变量的地址。又如:类型变量的地址。又如:int *p;以上是定义了一个指向指针的指针变以上是定义了一个指向指针的指针变量量p,该指针变量该指针变量p只能存放基类型为只能存放基类型为int类类型的指针变量的地址。又如:型的指针变量的地址。又如:int *pi,*p,k;以上语句是在同一语句中,同时定义以上语句是在同一语句中,同时定义了指针变量了指针变量pi、指向指针的指针变量指向指针的指针变量p和变和变量量k,这是允许的。这是允许的
8、。7.2.27.2.2指针变量的基类型的作用指针变量的基类型的作用任任何何一一个个指指针针变变量量都都是是用用于于存存放放它它所所指指向向变变量量的的地地址址,只只要要能能存存放放地地址址就就可可以以了,为何还要区别不同的基类型呢?了,为何还要区别不同的基类型呢?其其原原理理是是:不不同同的的数数据据类类型型变变量量,C语语言言系系统统为为它它们们开开辟辟的的存存储储空空间间的的字字节节数数是不同的,是不同的,int类型的数据存储空间是类型的数据存储空间是2个字节,个字节,float类型的数据存储空间是类型的数据存储空间是4个字节,个字节,系统表示每一个存储空间的地址时,是,系统表示每一个存储
9、空间的地址时,是取该存储空间的第取该存储空间的第1个字节的地址作为该变个字节的地址作为该变量存储空间的地址。那么当一个基类型为量存储空间的地址。那么当一个基类型为int类型的指针变量类型的指针变量p指向了一个指向了一个int类型的类型的变量变量a时,是将该变量时,是将该变量a所占的所占的2个字节的存个字节的存储空间中的第储空间中的第1个字节存储空间的个字节存储空间的“地址地址”存入指针变量存入指针变量p中,如图中,如图7-2(b)所示。所示。图图7-2 指针和指针所指向的对象指针和指针所指向的对象所以根据指针变量所以根据指针变量p中存放的中存放的“地址地址”,只能寻找到变量,只能寻找到变量a第
10、第1个字节的存储空间,个字节的存储空间,如果只提取变量如果只提取变量a所占存储空间第所占存储空间第1个字节个字节的数据,显而易见不是的数据,显而易见不是int类型变量类型变量a的原值,的原值,因为变量因为变量a的原值是通过的原值是通过2个字节来存储的个字节来存储的数据。此时我们可以通过指针变量数据。此时我们可以通过指针变量p的基类的基类型解决问题,知道了变量型解决问题,知道了变量a的第的第1个字节的个字节的地址,再根据指针变量地址,再根据指针变量p的基类型为的基类型为int类型,类型,系统就将从变量系统就将从变量a的第的第1个字节所在的地址个字节所在的地址开始,连续提取开始,连续提取2个字节中
11、的数据,此时的个字节中的数据,此时的数据就是数据就是int类型变量类型变量a的原值。的原值。同理,基类型为同理,基类型为float类型的指针变量,根据类型的指针变量,根据指针变量中存放指针变量中存放float类型变量的地址值,可以寻类型变量的地址值,可以寻找到所需存储空间中的第找到所需存储空间中的第1个字节所在位置,然个字节所在位置,然后再根据基类型为后再根据基类型为float类型,连续地提取类型,连续地提取4个字个字节中的数据,作为被访问的数据,这才是节中的数据,作为被访问的数据,这才是float类类型变量中存放的真实数据。由此,我们可以看到型变量中存放的真实数据。由此,我们可以看到指针变量
12、在定义时,其基类型是何等的重要。因指针变量在定义时,其基类型是何等的重要。因此,定义什么样的基类型指针变量,该指针变量此,定义什么样的基类型指针变量,该指针变量只能存放什么样类型变量的地址,两者必须一致,只能存放什么样类型变量的地址,两者必须一致,否则就可能出现了张冠李戴的错误现象。否则就可能出现了张冠李戴的错误现象。7.3 给指针变量赋值给指针变量赋值7.3.17.3.1使指针指向一个对象使指针指向一个对象1通通过过求求地地址址运运算算符符(&)把把一一个变量的地址赋给指针变量个变量的地址赋给指针变量“&”是是求求地地址址运运算算符符,该该运运算算符符为为单单目目运运算算符符,用用于于求求变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教程 07 地址 指针
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内