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

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

文章標籤
創作者介紹

香腸炒章魚

mitblog 發表在 痞客邦 PIXNET 留言(0) 人氣()