天天看點

C/C++ —— 什麼是定義?什麼是聲明?

什麼是定義?什麼是聲明?它們有何差別?

舉個例子:

A)int i;

B)extern int i; (關于 extern,後面解釋)

哪個是定義?哪個是聲明?或者都是定義或者都是聲明?我所教過的學生幾乎沒有一

人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!

什麼是定義:所謂的定義就是(編譯器)建立一個對象,為這個對象配置設定一塊記憶體并給它

取上一個名字,這個名字就是我們經常所說的變量名或對象名。但注意,這個名字一旦和

這塊記憶體比對起來(可以想象是這個名字嫁給了這塊空間,沒有要彩禮啊。 ^_^),它們就同

生共死,終生不離不棄。并且這塊記憶體的位置也不能被改變。一個變量或對象在一定的區

域内(比如函數内,全局等)隻能被定義一次,如果定義多次,編譯器會提示你重複定義

同一個變量或對象。

什麼是聲明:有兩重含義,如下:

第一重含義:告訴編譯器,這個名字已經比對到一塊記憶體上了(伊人已嫁,吾将何去何

從?何以解憂,唯有稀粥),下面的代碼用到變量或對象是在别的地方定義的。聲明可以出

現多次。

第二重含義:告訴編譯器,我這個名字我先預定了,别的地方再也不能用它來作為變量

名或對象名。比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預

訂,别人再也不允許使用這個座位。其實這個時候你本人并沒有坐在這個座位上。這種聲

明最典型的例子就是函數參數的聲明,例如:

void fun(int i, char c);

好,這樣一解釋,我們可以很清楚的判斷:A)是定義; B)是聲明。

那他們的差別也很清晰了。

記住,

定義聲明最重要的差別:定義建立了對象并為這個對象配置設定了記憶體,聲明沒有配置設定記憶體(一個抱伊人,一個喝稀粥。 ^_^)。

繼續閱讀