阅界资讯

指针不是箭头,是门牌号:扔掉那张图,秒懂底层

阅阅界编辑部2阅读2分钟

让程序员画指针,三秒出图:两个框,一根弧线。 neat,好懂,课上用了四十年。可就是这张图,拦住了无数人:箭头在机器里不存在,没有线,没有方向。真相只有一句:指针就是存着门牌号的整数。扔掉箭头,用芯片的眼光看,指针运算不吓人,数组退化很合理,连最恐怖的段错误,都变成了看门大爷。这篇在海外拿下几十赞,评论区:早看到,少挂两科。

一、内存是条街。先忘掉文件变量对象,内存就是一条巨长的街,全是带门牌号的小柜子,一个一字节。变量不是盒子,是包下几个连号柜子:整数占四个,门牌号连着。你写的每个值,都住在某个门牌号里。指针,就是纸条上抄的门牌号。抄的是号,不是房子,拿号找房,天经地义。这么一看,指针加一,就是门牌号加一,顺着街走,走到隔壁,有啥可怕的。

二、数组退化就通了。数组名,就是这条街第一间的门牌号。传来传去,传的都是号,不是整条街。所以长度丢了,太正常了:你给人的是门牌号,又不是房产证。段错误也通了:拿着号去敲没你的门,看门大爷操作系统一棍子打出来。不是随机噩梦,是保护费:没登记的门,不许进。懂了这层,报错信息从天书变情书,句句为你好。

三、抄作业。三句话背下来:指针是号,不是房;数组是首号,不是整街;报错是保护,不是找茬。下次再被底层吓住,默念三遍,默念完还怕,就去画条街,标上门牌号,住进去几个值。住一回,通一辈子。底层不神秘,神秘的是那张箭头图,扔了它,海阔天空。

来源|海外开发者社区,https://dev.to/smtahosin/pointers-arent-arrows-how-c-and-c-actually-talk-to-hardware-9d6

海外技术译文后端科普基础

评论(0)

暂无评论,来抢第一条。