在前面,我們非常小心地說,
int fahr;
這個指令是宣告 (declaration),而
fahr = -40;
這個指令才是定義 (definition)。
兩者有何不同?
以下兩段,如果是第一次讀,先看看就好。以後將會逐漸明白。
所謂宣告(declaration),是將變數名 fahr 介紹給 C 知道。使得 C 知道 fahr 的資料型態是 int。
宣告之後,C 並不知道 fahr 的值是多少, 但是它知道,將來會有一個 32-bit 整數的值要儲存在記憶體裡面。
所以,它會要求作業系統給我們保留連續 4 bytes 的記憶體, 預備將來儲存 fahr 的值。
注意,這 4 個 bytes 的位址一定是連號的, 而且它們的第一個 byte 的位址,就稱為 fahr 這個變數的位址。
比方說,C 得知 fahr 的位址是 1024000。
所謂定義(definition),就是將變數的值儲存進入記憶體。
fahr 的值,是用 32 個 bits、以二補數格式所記錄的整數。
32 個 bits 分割成 4 個 bytes,就儲存在 1024000、1024001、1024002、1024003 這四個記憶體中。
以後,凡是我們在原始碼中,要用到 fahr 的時候, C 就去那 4 個位址,把 fahr 的值讀出來。
凡是我們要重新定義 fahr 的值的時候, C 就把新的值寫進那 4 個位址裡面。
習題
考慮以下三個指令
int n;
n = 7;
n = 2*n-13;
C 一共去 n 的記憶體位址讀過幾次資料?一共去寫過幾次資料?
Reference:http://libai.math.ncu.edu.tw/bcc16/C/C/b-9.shtml
留言列表