C語言

當前位置 /首頁/計算機/C語言/列表

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 = '