非原 c語言之宣告和定義的區別

2022-02-07 21:32:17 字數 2177 閱讀 2274

什麼是定義?什麼是宣告?它們有何區別?

舉個例子:12

a)inti;

b)externinti;(關於extern,後面解釋)

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

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

同乙個變數或物件。

什麼是宣告:有兩重含義,如下:

第一重含義:告訴編譯器,這個名字已經匹配到一塊記憶體上了(伊人已嫁,吾將何去何從?何以解憂,唯有稀粥),下面的**用到變數或物件是在別的地方定義的。宣告可以出現多次。

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

1voidfun(inti,charc);

好,這樣一解釋,我們可以很清楚的判斷:a)是定義;b)是宣告。

那他們的區別也很清晰了。記住,定義宣告最重要的區別:定義建立了物件並為這個extern 宣告變數是在其他檔案中宣告(也可以看做是引用變數)。

物件分配了記憶體,宣告沒有分配記憶體(乙個抱伊人,乙個喝稀粥。^_^)。

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

什麼是定義?什麼是宣告?它們有何區別?

舉個例子:12

a)inti;

b)externinti;(關於extern,後面解釋)

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

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

同乙個變數或物件。

什麼是宣告:有兩重含義,如下:

第一重含義:告訴編譯器,這個名字已經匹配到一塊記憶體上了(伊人已嫁,吾將何去何從?何以解憂,唯有稀粥),下面的**用到變數或物件是在別的地方定義的。宣告可以出現多次。

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

1voidfun(inti,charc);

好,這樣一解釋,我們可以很清楚的判斷:a)是定義;b)是宣告。

那他們的區別也很清晰了。記住,定義宣告最重要的區別:定義建立了物件並為這個extern 宣告變數是在其他檔案中宣告(也可以看做是引用變數)。

物件分配了記憶體,宣告沒有分配記憶體(乙個抱伊人,乙個喝稀粥。^_^)。

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

C語言之宣告和定義

1 先說 宣告 和 定義 的區別 這裡的物件泛指函式 變數等 宣告 只是簡單地告訴編譯器在其他地方建立的物件的名字,允許你使用這個名字,並不分配記憶體空間,以extern關鍵字標識。定義 是一種特殊的宣告,它在宣告的同時告訴編譯器為物件分配記憶體空間。c語言的物件必須有且只有乙個定義,但可以有多個e...

體會c語言之宣告

宣告在c 語言程式設計過程中起著核心的作用,通過宣告變數和函式,可以檢查程式潛在的錯誤以及把程式翻譯成目標 兩方面為編譯器提供至關重要的資訊。在宣告變數和函式上有許多共同點。此外宣告還為儲存期限,作用域,以及連線提供重要的堅實的基礎。宣告如何構成 說明符 乙個或多個宣告表示式 說明符 描述宣告變數和...

C語言中宣告和定義的區別

宣告指定了乙個變數的識別符號,用來描述變數的型別,用於編譯器識別變數名所引用的實體。定義是對宣告的實現或者是例項化,為變數分配儲存空間,還可以給變數賦初始值。變數的宣告和定義 int a 需要建立儲存空間 既是定義,也是宣告 extern int a 不需要建立儲存空間 只是宣告,不是定義 如果宣告...