為什麼C語言訪問記憶體位址需要指標?

2021-10-09 08:24:50 字數 755 閱讀 3713

1、當記憶體收到這一串訊號時, 電路中的某8個儲存單元就會響應, 這8個儲存單元會記住代表「123」的開(on) 或關(off) 的電訊號。 為什麼是8位呢? 這是因為指令裡指定了「byte」。如果將byte換成word,那麼123將會被解釋成乙個16位的數值。

mov byte [678], 123
2、mov指令有乙個規則, 那就是源資料和目的資料必須位數相同。也就是說, 能向al裡代入的就只有byte, 這樣一來就可以省略byte, 即可以寫成:(al是乙個8位暫存器)

mov al, byte [si]
省略寫法:

mov al, [si]
3、向乙個記憶體位址寫入資料

i = i & 0x0f;
轉換成組合語言:

mov [i] (i & 0x0f)
很明顯型別錯誤,因為指定記憶體時,不知道是byte,word,還是dword,只有在另一方也是暫存器的時候才能省略。

想要指定記憶體型別,就需要定義指標變數(也就是存放記憶體位址的變數)。

char *p;
宣告乙個指標變數p,p裡放入與i相同的值,然後執行如下語句:

p = i & 0x0f;
所以char *p;就表示byte [p],指定了記憶體的型別。

內容參考30天自製作業系統

C語言記憶體位址

任務清單 c語言在記憶體中一共分為5個區域 記憶體棧區 存放區域性變數名 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等,函式呼叫結束後釋放記憶體空間。通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內建立,在離開作用域後自動銷毀的變數的儲存區。通常是區域性變數,函...

C語言記憶體位址基礎(ZZ)

從計算機記憶體的角度思考c語言中的一切東東,是挺有幫助的。我們可以把計算機記憶體想象成乙個位元組陣列,記憶體中每乙個位址表示 1 位元組。比方說我們的電腦有 4k 記憶體,那這個記憶體陣列將會有 4096 個元素。當我們談論乙個儲存位址的指標時,就當相於我們在談論乙個儲存著該記憶體陣列某個元素索引的...

C語言記憶體位址對齊詳解

什麼是位址對齊?現代計算機中記憶體空間都是按照位元組 byte 劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排列,這就是對齊。為什麼要位址對齊?對齊的...