C语言程序设计教程第07章地址和指针

C语言程序设计教程第07章地址和指针

ID:40841358

大小:271.00 KB

页数:38页

时间:2019-08-08

C语言程序设计教程第07章地址和指针_第1页
C语言程序设计教程第07章地址和指针_第2页
C语言程序设计教程第07章地址和指针_第3页
C语言程序设计教程第07章地址和指针_第4页
C语言程序设计教程第07章地址和指针_第5页
资源描述:

《C语言程序设计教程第07章地址和指针》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第7章地址和指针7.1地址和指针的概念7.2指针变量的定义和指针变量的基类型7.3给指针变量赋值7.4对指针变量的操作7.5指针在函数方面的应用7.1地址和指针的概念7.1.1地址和指针的概念1.“地址”的概念2.存储单元“地址”的表示3.“指针”的概念7.1.2为什么使用指针使用指针,实现了“间接访问”变量,这只是一个过程,其实质是可以达到方便地引用数组,提高计算机的运行效率,调用函数时可以修改或返回多个参数值,还可以描述更复杂的数据结构,……为了加深读者对指针重要性的理解,下面我们举一函数调用的实例。例7.1

2、欲想调用fun函数,计算出两个数相加和相减的值,然后在main函数中显示结果。程序如下:fun(intx,inty){intadd=0,sub=0;add=x+y;sub=x–y;}main(){inta,b,add=0,sub=0;scanf("%d%d",&a,&b);printf("a=%d,b=%d",a,b);fun(a,b);printf("%d+%d=%d",a,b,add);printf("%d–%d=%d",a,b,sub);}假设程序运行时给变量a输入8,给变量b输入5,程序运行结

3、果:a=8,b=58+5=08–5=0程序运行结果与我们“想象”的不一致,为什么呢?其原因是fun函数中变量add和sub与main函数中变量add和sub各自占用自己的存储单元,因此fun函数中变量add存放的两个数的求和值无法传回到main函数的变量add中,同理,fun函数中变量sub存放的两个数的相减值也无法传回到main函数的变量中。下面我们修改一下源程序,借助指针,将fun函数中运行的结果传回到main函数中。7.2指针变量的定义和指针变量的基类型7.2.1指针变量的定义和指针变量的基类型定义指针变量

4、的一般形式如下:类型名*指针变量名1,*指针变量名2,……;例如:int*pi,*pj;以上定义语句中,pi和pj都是用户标识符,表示具体的变量名,现在每个变量名前加一星号“*”说明符,用来说明所定义的变量是指针变量。注意:变量名前的星号“*”不可省略,若省略了星号“*”说明符,就变成了普通整型变量。int是数据类型名,在这里,说明了pi和pj是两个指向整型(int类型)变量的指针,也就是说变量pi和pj中只能存放int类型变量的地址,这时我们称int是指针变量pi和pj的基类型。又如:double*pd;cha

5、r*s1,*s2;在这里定义了三个指针变量pd、s1和s2,其中指针变量pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址,指针变量s1和s2的基类型为char类型,在指针变量s1和s2中只能存放char类型变量的地址。又如:int**p;以上是定义了一个指向指针的指针变量p,该指针变量p只能存放基类型为int类型的指针变量的地址。又如:int*pi,**p,k;以上语句是在同一语句中,同时定义了指针变量pi、指向指针的指针变量p和变量k,这是允许的。7.2.2指针变量的基类型的

6、作用任何一个指针变量都是用于存放它所指向变量的地址,只要能存放地址就可以了,为何还要区别不同的基类型呢?其原理是:不同的数据类型变量,C语言系统为它们开辟的存储空间的字节数是不同的,int类型的数据存储空间是2个字节,float类型的数据存储空间是4个字节,……,系统表示每一个存储空间的地址时,是取该存储空间的第1个字节的地址作为该变量存储空间的地址。那么当一个基类型为int类型的指针变量p指向了一个int类型的变量a时,是将该变量a所占的2个字节的存储空间中的第1个字节存储空间的“地址”存入指针变量p中,如图7

7、-2(b)所示。图7-2指针和指针所指向的对象所以根据指针变量p中存放的“地址”,只能寻找到变量a第1个字节的存储空间,如果只提取变量a所占存储空间第1个字节的数据,显而易见不是int类型变量a的原值,因为变量a的原值是通过2个字节来存储的数据。此时我们可以通过指针变量p的基类型解决问题,知道了变量a的第1个字节的地址,再根据指针变量p的基类型为int类型,系统就将从变量a的第1个字节所在的地址开始,连续提取2个字节中的数据,此时的数据就是int类型变量a的原值。同理,基类型为float类型的指针变量,根据指针变

8、量中存放float类型变量的地址值,可以寻找到所需存储空间中的第1个字节所在位置,然后再根据基类型为float类型,连续地提取4个字节中的数据,作为被访问的数据,这才是float类型变量中存放的真实数据。由此,我们可以看到指针变量在定义时,其基类型是何等的重要。因此,定义什么样的基类型指针变量,该指针变量只能存放什么样类型变量的地址,两者必须一致,否则就可能出现了张冠李戴

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

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

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