个人觉得有3个问题导致:

对指针的解释过于同质化显然大家对当前的主流解释,接受度一般指针常跟数组混用,让指针的规则,进一步的模糊

这里只试图解决前2个问题。排除各种文学上的加工(个人觉得类比的方法,是一个双刃剑,用的好,可以把复杂问题简单化;用的不好,会把问题弄的更复杂)如《CPU眼里的:指针变量》所说:指针变量跟普通变量并没有本质区别!它们都是某个内存地址的别名。

只是普通变量,往往保存像:0x1、0x0002、0x00000003、0x00000004…这种用于作数学计算的数值。

而指针变量,往往保存像:0x00000001、0x00000002、0x00000003、0x00000004这种内存地址的数值。

如果我不告诉你,你甚至不知道哪个是指针变量,保存的数值、哪个是普通变量,保存的数值?无论相信与否,CPU并不知道哪个是普通变量、哪个是指针变量。“指针”是为了便于理解,我们自己造的一个词。但事与愿违,它似乎并没有让“指针”更加容易理解。

h3c dhcp 保留地址_iana保留地址 cz88net_保留地址

所以,与其这样,还不如返璞归真的告诉读者:变量也可以用来保存内存地址,这时我们也叫这个变量为:指针。

那问题来了,为什么指针变量保存的内存地址,如此特殊?如此特别?如此让人不省心?其实原因非常简单。如果有人在厕所的墙上写:133445566,你可能会不以为然,但如果133445566是你的身份证号码、或者是你的手机号码,你会作何感想?你觉得你一天会接到多少个陌生来电?

或许你觉得这是狡辩,一个是个人隐私,一个是内存地址的数值保留地址,两者能混为一谈吗?能!请问某个内存块的最重要、最唯一的“个人隐私”是什么?显而易见,就是:内存地址!

各种关于指针的问题,不过是在用各种方法套取:某一段内存的内存地址。这个内存地址,可能是某个变量的内存地址;也可能是某个函数的内存地址;也可以是操作系统内核的内存地址…一旦获得内存地址,就可以通过指针的*操作来读、写内存。如果此时,你已经忘记、或弄混了这个内存地址的合法性后,你往往会得到一个熟悉的:segmentation fault。也就是:查无此人,或拨打的是空号(此时,133445566是非法值)

最后,令人遗憾的是:大家似乎对各种指针的花活,不厌其烦,例如:尽管还是用来保存内存地址,但还是衍生出了:双重指针、3重指针、N重指针。要知道很多编译型的语言保留地址,完全不需要如此复杂的指针概念。

而且往往N重指针能解决的问题,普通指针也能解决!关于第3个问题的分析,可以参看《CPU眼里的:双重指针》

限时特惠:本站每日持续更新海量展厅资源,一年会员只需29.9元,全站资源免费下载
站长微信:zhanting688