陳正沖老師講c語言之聲明和定義的區別


 

什么是定義?什么是聲明?它們有何區別?

舉個例子:

A)int i;
B)extern int i;(關於extern,后面解釋)


哪個是定義?哪個是聲明?或者都是定義或者都是聲明?我所教過的學生幾乎沒有一人能回答上這個問題。這個十分重要的概念在大學里從來沒有被提起過!

什么是定義:所謂的定義就是(編譯器)創建一個對象,為這個對象分配一塊內存並給它取上一個名字,這個名字就是我們經常所說的變量名或對象名。但注意,這個名字一旦和這塊內存匹配起來(可以想象是這個名字嫁給了這塊空間,沒有要彩禮啊。^_^),它們就同生共死,終生不離不棄。並且這塊內存的位置也不能被改變。一個變量或對象在一定的區域內(比如函數內,全局等)只能被定義一次,如果定義多次,編譯器會提示你重復定義
同一個變量或對象。


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


第一重含義:告訴編譯器,這個名字已經匹配到一塊內存上了(伊人已嫁,吾將何去何從?何以解憂,唯有稀粥),下面的代碼用到變量或對象是在別的地方定義的。聲明可以出現多次。

第二重含義:告訴編譯器,我這個名字我先預定了,別的地方再也不能用它來作為變量名或對象名。比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預訂,別人再也不允許使用這個座位。其實這個時候你本人並沒有坐在這個座位上。這種聲明最典型的例子就是函數參數的聲明,例如:

void fun(int i, char c);


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


那他們的區別也很清晰了。記住,定義聲明最重要的區別:定義創建了對象並為這個extern 聲明變量是在其他文件中聲明(也可以看做是引用變量)。

 

對象分配了內存,聲明沒有分配內存(一個抱伊人,一個喝稀粥。^_^)

 

 

 

 

 

 

 

 

 

 

參考:陳正沖老師的《c語言深度剖析》。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM