C 語言內存地址基礎知識

內存不一定連續,也不一定按順序處理。下面小編給大家介紹C 語言內存地址基礎,歡迎閱讀!

C 語言內存地址基礎知識

  C 語言內存地址基礎知識

計算機內存的角度思考C語言中的一切東東,是挺有幫助的。我們可以把計算機內存想象成一個字節數組,內存中每一個地址表示 1 字節。比方說我們的電腦有 4K 內存,那這個內存數組將會有 4096 個元素。當我們談論一個存儲地址的指針時,就當相於我們在談論一個存儲着該內存數組某個元素索引的指針。逆向引用某個指針,將會得到數組中該索引所指向的值。這一切當然都是謊言。操作系統對內存的管理要遠比這複雜。內存不一定連續,也不一定按順序處理。但前面的類比是一種討論C語言內存的簡單方式。

如果對『指針』、『地址』和『逆向引用』感到混亂,請看《C語言指針5分鐘教程》(發送 指針,可看全文)。// 譯註:“dereferencing” 的譯法比較多,本文采用了“逆向引用”。

假設我們的計算機有 4K 的內存,下一個開放地址的索引是2048。我們聲明一個新的字符變量i='a'。當該變量所獲得的內存放置了它的值,變量的名字也與內存中的該位置關聯,我們的字符i就獲得了一個存儲在2048位置的值。該字符是單字節的因此它只佔用了索引爲 2048 的位置。如果我們對 i 變量使用地址操作符(&),它將返回到索引爲2048的位置。如果這個變量是另一種類型,比如是 int,它將佔用4字節,在數組中佔用索引爲 2048-2051 的位置。使用地址操作符仍將返回索引2048的位置,因爲 int 型即便佔用了 4 字節,但它開始於 2048 位置。我們看一個例子:

// intialize a char variable, print its address and the next address

char charvar = '