閱界資訊

指針不是箭頭,是門牌號:扔掉那張圖,秒懂底層

閱閱界編輯部2閱讀2分鐘

讓程序員畫指針,三秒出圖:兩個框,一根弧線。 neat,好懂,課上用了四十年。可就是這張圖,攔住了無數人:箭頭在機器裏不存在,沒有線,沒有方向。真相只有一句:指針就是存着門牌號的整數。扔掉箭頭,用芯片的眼光看,指針運算不嚇人,數組退化很合理,連最恐怖的段錯誤,都變成了看門大爺。這篇在海外拿下幾十贊,評論區:早看到,少掛兩科。

一、內存是條街。先忘掉文件變量對象,內存就是一條巨長的街,全是帶門牌號的小櫃子,一個一字節。變量不是盒子,是包下幾個連號櫃子:整數佔四個,門牌號連着。你寫的每個值,都住在某個門牌號裏。指針,就是紙條上抄的門牌號。抄的是號,不是房子,拿號找房,天經地義。這麼一看,指針加一,就是門牌號加一,順着街走,走到隔壁,有啥可怕的。

二、數組退化就通了。數組名,就是這條街第一間的門牌號。傳來傳去,傳的都是號,不是整條街。所以長度丟了,太正常了:你給人的是門牌號,又不是房產證。段錯誤也通了:拿着號去敲沒你的門,看門大爺操作系統一棍子打出來。不是隨機噩夢,是保護費:沒登記的門,不許進。懂了這層,報錯信息從天書變情書,句句爲你好。

三、抄作業。三句話背下來:指針是號,不是房;數組是首號,不是整街;報錯是保護,不是找茬。下次再被底層嚇住,默唸三遍,默唸完還怕,就去畫條街,標上門牌號,住進去幾個值。住一回,通一輩子。底層不神祕,神祕的是那張箭頭圖,扔了它,海闊天空。

來源|海外開發者社區,https://dev.to/smtahosin/pointers-arent-arrows-how-c-and-c-actually-talk-to-hardware-9d6

海外技術譯文后端科普基础

評論(0)

暫無評論,來搶第一條。