使用指针的目的就是要通过内存单元地址(指针)来间接引用内存单元,但这也是很多初学者感到不适应的地方,本子任务内容对内存的直接引用和间接引用做一个对比和总结,希望同学们为后边灵活使用指针打好基础。
1.内存的直接引用
如前所述,内存的直接引用就是按照变量的名字直接使用该变量对应的内存单元,是程序中最常使用的内存引用形式。如例7-1所示:
【例7-1】直接访问输出变量n的值。
2.内存的间接引用
所谓间接内存引用就是通过内存单元的地址来引用该内存单元,为了支持间接内存引用,C语言中专门提供了间接访问运算符“*”,“*”是一个单目运算符,但是右侧的运算对象必须是一个指针,如p是一个指针,则*p即代表该指针所指向的内存单元。如例7-3(b)所示,由于指针变量p指向整型变量a,则*p就是变量a。
【例7-2】间接访问输出变量n的值。
程序中只是给*p赋10,并没有给变量n赋值,但是变量n和*p的值都是10,这说明什么问题呢?这就是所谓的间接内存引用,当p中保存变量n的地址时(我们说指针p是指向变量n的),则*p就代表变量n。
由此例可以看出,我们不使用变量的名字(n)可以使用该变量,在知道该变量的地址(p)后,在该地址前边加上间接访问运算符*(*p)就可以代表该对象(n),因此我们说如果有:
int n,*p=&n;(www.xing528.com)
则*p=*(&n)=n;
这就是间接引用内存的方法,即一个地址前边加*,代表该地址对应的存储单元。
一般来说,初学者感到指针比较难以把握,可能应该有以下两个方面的原因:
(1)“*”的使用
在例7-2中,“*”出现在了两个位置,但是代表着不同的含义。在定义语句int*p中,“*”说明p是一个指针变量;但是在引用语句*p=10中,“*”是一个间接访问运算符,它和其后的地址连接起来(*p)是一个整体,代表的是该地址对应的对象n。
(2)指针本身的用法比较灵活
在例7-2中,总共用到了两种对指针的操作。在语句p=&n中把变量n的地址赋给p,用到的是对指针变量本身的赋值操作;而在语句*p=10语句中,用到的是指针p指向的对象(n)而不是p本身,属于通过地址间接引用n。
请同学们通过例7-2深入理解以上两点,彻底理解和掌握通过地址间接访问内存的方法,方便后续章节的学习。当然在学习的过程中也有同学质疑为什么不直接使用内存而要使用内存的间接访问形式,在后续的章节中我们可以了解到实际的需求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。