指向指针的指针,指针与变量的指向与解引用求教一下清晰概念
如果有**pt,*pp,p,这样两个指针一个变量。**pp指向*p,*p指向变量a。
我网上搜了一下,加上自己的了解,把自己的个人理解写出来:
指针实际上可以看成是一种存储地址的变量,它们都有实际的地址。
如上所述,变量a是内存中的一个地址,里面存储一个值。而用户使用这个值的时候,是不需要*解引用的。
而指针*p实际上也是内存中的一个地址,它里面存储了变量a的地址,指针p通过这个地址指向变量a,而这个时候需要使用a里面的值的时候,就需要*p,进行解引用操作。
而**pp,指向指针p的指针,它同指针p也是一个地址,里面存储了指针p的地址,通过这个地址指向指针p。因而一层解引用,也就是*pp,仅能让指针pp指向指针p。
也就是说**pp==*p==a;
而*pp==p,这个时候p只是一个地址,这个地址的内部存储着变量a的地址。
只有在双层仅引用**pp的时候,指针才指向了a,它这时等价于a。
所以printf("%d\n",**pp)才会等价于printf("%d\n",a)。
而因为取变量的值是不需要*解引用的,用了只会出错,{:10_256:}所以几层指针,就用几个*才能指到最底层的变量,这样想就比较好理解了。
也不知道我这么想对不对,希望老师来解答一下,也希望还在埋头苦学的同学们来激烈讨论一下。
ps:关于多层指针与多维数组的关系我大概抓住一点,但又很模糊,希望真正懂的老师来帮我解答一下{:10_254:} 我也是刚学,来说说我自己的理解吧。比如说*p就可以和一位数组相似,**pp就和二维数组相似,依次列推……。p的取值就p+常数(1,2,3什么的),就和一位数组的下标一样的,取值一次就可以了。pp那就要先确定在哪个列再确定在该列的哪个位置,所以取值需要解引用两次第一次是列,第二次是行。往后的多维也可以这么去推。
不知道我怎么说你能明白吗?不明白记得回我,让我自己讲可能有点乱,你一个一个的问就能好说一点{:10_262:} 丶忘却的年少o 发表于 2017-8-21 21:11
我也是刚学,来说说我自己的理解吧。比如说*p就可以和一位数组相似,**pp就和二维数组相似,依次列推……。 ...
恩,我也是这么理解的,你这么一说我就感觉清晰很多。{:10_277:} 正在卓尼小乱 发表于 2017-8-21 21:24
恩,我也是这么理解的,你这么一说我就感觉清晰很多。
那就好,记得多做作业,能加深印象 正在卓尼小乱 发表于 2017-8-21 21:24
恩,我也是这么理解的,你这么一说我就感觉清晰很多。
如果没什么问题了,记得点“最佳答案”{:10_303:} 拿奖励去学习 顶楼主,加油↖(^ω^)↗。 顶一个,厉害
页:
[1]