C 教材:宣告 vs 定義

在前面,我們非常小心地說,

int fahr;
這個指令是宣告 (declaration),而
fahr = -40;
這個指令才是定義 (definition)。 兩者有何不同?

以下兩段,如果是第一次讀,先看看就好。以後將會逐漸明白。

所謂宣告,是將變數名 fahr 介紹給 C 知道。 使得 C 知道 fahr 的資料型態是 int。 宣告之後,C 並不知道 fahr 的值是多少, 但是它知道,將來會有一個 32-bit 整數的值要儲存在記憶體裡面。 所以,它會要求作業系統給我們保留連續 4 bytes 的記憶體, 預備將來儲存 fahr 的值。 注意,這 4 個 bytes 的位址一定是連號的, 而且它們的第一個 byte 的位址,就稱為 fahr 這個變數的位址。 比方說,C 得知 fahr 的位址是 1024000。

所謂定義,就是將變數的值儲存進入記憶體。 fahr 的值,是用 32 個 bits、以二補數格式所記錄的整數。 32 個 bits 分割成 4 個 bytes,就儲存在 1024000、1024001、1024002、1024003 這四個記憶體中。 以後,凡是我們在原始碼中,要用到 fahr 的時候, C 就去那 4 個位址,把 fahr 的值讀出來。 凡是我們要重新定義 fahr 的值的時候, C 就把新的值寫進那 4 個位址裡面。

習題

  1. 考慮以下三個指令
    int n;
    n = 7;
    n = 2*n-13;
    C 一共去 n 的記憶體位址讀過幾次資料?一共去寫過幾次資料?

[BCC16-C]
單維彰 (2000/03/24) --- 03/04/26 (單)
[Prev] [Next] [Up]