第九章 指针.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)
《第九章 指针.ppt》由会员分享,可在线阅读,更多相关《第九章 指针.ppt(144页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第九章 指针 9.1 地址和指针9.1.1 指针概述1变量的“直接访问”方式凡在源程序中定义的变量,在编译时系统都给它们分配相应的存储单元,每个变量所占的存储单元都有确定的地址。具体的地址是在编译时分配的。例如:short a=1,b=2;float c=3.4,d=5.6;char e=x,f=y;2变量的“间接访问”方式“间接访问”方式就是把一个变量的地址放在另一个变量的存储单元中。如图9-2所示。图9-2 将变量的地址放在另一个变量的存储单元中 变量pa、pb分别用来存放变量a、b的地址(即&a、&b)。要得到变量a的值,可以先访问变量pa,得到变量pa的值1010后,再通过
2、地址1010找到它所指向的存储单元中的值。这种把地址存放在一个变量中,然后通过先找出地址变量中的值(一个地址),再由此地址找到最终要访问的变量的方法,称为“间接访问”方式。 3指针概念的引出 通过用一个地址变量存储某一普通变量的起始地址,进而指向一个普通变量。可以将它形象地表示为如图9-3所示的逻辑关系。图9-3 指针指向变量 一个变量的地址称为该变量的“指针”。例如,地址1010是变量a的指针。存放地址的变量叫“指针变量”。从图9-3可以看到,pa是指针变量,因为pa中存放着变量a的地址,称为pa指向变量a,通过变量pa就能找到a的值。请区分“指针”和“指针变量”这两个概念,指针是一个地址,
3、而指针变量是存放地址的变量。 9.2 一维数组的指针表示方法9.2.1 一维数组的地址表示法(地址法) 在程序中定义一个数组后,编译系统就会为它分配一个可以容纳数组中所有元素的存贮区,其中数组名代表这个数组的起始地址。那么在C语言中,数组各元素的地址是如何表示和计算的呢?下面讨论一下一维数组的地址表示法。 定义一个含有5个元素的一维数组a如下: int a5=1,3,5,7,9; 它在内存中的分配情况如图9-4所示。return图9-5 一维数组和二维数组的地址比较对比结果见表9-1。 从表9-1中可以看出:右边与左边的差别仅在于,右边以a0代替了左边的b。二维数组a的第1行和第2行的情况与此
4、相类似,无非是分别用a1和a2代替a0而已。9.3.2 二维数组中的行地址与列地址 下面分析二维数组名a和a0,a1,a2的关系。 前面已经提到,一个二维数组可以认为是由若干个一维数组所组成。如果定义了一个二维实型数组float a35,则数组每行占54=20个字节。假设第0行从地址1000开始,则第1行从1020开始,第2行从1040开始,也就是说对应于a的值是1000,a+1的值为1020,a+2的值为1040。千万不要以为a+1是加4个字节,因为现在a是二维数组,对a来说,它的每一个“元素”是一行而不是一个基本数据元素。图9-6 单精度浮点型数组a35的各行首地址在内存中位置图9-7 二
5、维数组各元素行、列地址的表示从图9-7可以看到有二个方向的控制: a、a+i或&ai控制的是行,或者说它们是行控制。 *(a+i)+j或ai+j控制的是列,即列控制。 虽然a+1和a1的值均是1020,但含义(属性)是不一样的。a+1指向a1,是向纵向移动;a1指向a10,是向横向移动。 例如*(*(a+1)+2),表达式中的*(a+1)相当于a1,代表第1行第0列地址;那么对于*(a+1)+2是指第1行第2列地址,所以*(*(a+1)+2)就是1行2列元素的值。 既然二维数组的地址有行地址与列地址的区别,那么如果在程序中定义指针变量,也应该确定是指向行、还是指向列的问题,二者不能混淆。 1)
6、程序中定义指针变量的形式为int (*p)5,它表示p是一个行指针,每行含有5个基本整型元素(一维数组)。如图9-8所示。(2)对于行指针变量的定义形式,需要注意的是,括号是不可缺少的,它表示p先与“*”结合,是指针变量。如果写成*p5,由于方括弧优先于“*”,p先与 相结合,就成了数组类型,那么*p5就是后面我们要讲的指针数组.(3)printf函数中的*(*(p+i)+j)表示第i行第j列元素值。由于p是指向行(一维数组)的指针变量,因此,应赋予它行地址,于是p=a 是合法的。如果写成p=a0或p=&a00反倒不对了,因为类型不匹配。*(*(p+i)+j)的含义就是数组第i行第j列元素的值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九章 指针 第九
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内