記憶體與指標

記憶體:可定址的位元組陣列

把電腦的主記憶體想像成一條長得不可思議的街道:每一間房子大小完全相同,各放一樣小東西,而且每間房子的門上都漆著一個號碼。這裡的「房子」就是一個位元組(byte,8 個位元),門上的「號碼」就是它的位址(address)。從程式的角度看,記憶體就是這樣:一長串編了號的盒子,每個盒子裝一個位元組。

更精確地說,記憶體是一個從 0 開始往上編號的扁平位元組陣列:位元組 0、位元組 1、位元組 2……每個都能獨立讀寫。位元組本身不會說「我是數字」或「我是字母」——一個位元組只是個位元樣式(bit pattern),八個 0 與 1,意義完全來自讀它的程式碼。像 int x 這樣的 4 位元組整數,只是佔用了四個相鄰的盒子,例如位址 0x1000 到 0x1003。

「記憶體是一個編了號的位元組陣列」這個單一概念,是指標、堆疊、堆積以及這個領域中幾乎一切的基礎。硬體確實在其上加了結構(快取、對齊、虛擬位址),但 C 的抽象機器讓你大多數時候可以保留這個「一排盒子的街道」的簡單圖像,並據此正確地推理。

char buf[4] 把四個位元組並排放在例如 0x1000、0x1001、0x1002、0x1003;寫入 buf[2] = 65 會把位元樣式 0x41(十進位 65,也就是字母 'A')存進 0x1002 那一個盒子。

四個相鄰的位元組;索引 2 就是「起始位址 + 2」那個盒子。

位元組是 C 中最小、可單獨定址的單位;你無法取得單一位元的位址。同樣八個位元可以代表一個小數字、一個字元、一組旗標,或某個較大值的一部分——詮釋是程式的工作,不是記憶體的工作。

又稱
main memoryRAM主記憶體