2 變數定義和變數宣告的區別
3 物件定義和物件宣告的區別
關於宣告和定義有如下兩種特殊情況需要注意:
(1)宣告和定義如果變數型別不一致,將導致錯誤的解析。
// global.c
float g_f =
10.0
;// main.c
extern
int g_f;
intmain
(void
)
(2)對於結構體型別如果只有宣告而沒有定義是無法使用sizeof得到結構體型別的大小的。
// global.h
struct test
;// main.c
struct test;
intmain
(void
)
對於如下語句,哪個是變數定義?哪個是變數宣告?
int i;
// 變數定義
extern
int i;
// 變數宣告
變數定義:所謂的定義就是(編譯器)建立乙個物件,為這個物件分配一塊記憶體並給它取上乙個名字,這個名字就是我們經常說的變數名或物件名。但是要注意,這個名字和記憶體一旦匹配起來,就永久繫結(全域性變數);並且這塊記憶體的位置不能發生改變。乙個變數或物件在一定的區域內(比如函式內、全域性等)只能被定義一次,如果定義多次,編譯器會提示使用者重複定義了同乙個變數或物件。
變數宣告:
告訴編譯器,當前的名字已經匹配到一塊記憶體上了,下面的**用到變數或物件是在別的地方定義的。宣告是可以出現多次的。
告訴編譯器,當前的名字已經被預定,別的地方再也不能用它來作為變數名或物件名。
變數定義和宣告最重要的區別:變數定義建立了物件並為這個物件分配了記憶體,宣告沒有分配記憶體。
物件定義:
物件宣告:
定義和宣告的區別
之前學習c c 的時候,都沒去注意變數的定義和宣告的具體區別,也隨意將它們放在標頭檔案,今日看c primer,才發現原來變數的定義和宣告之間的區別竟然如此之大,而且區別它們兩個竟然如此重要。變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。宣告用於向程式...
變數定義和宣告的區別
所謂定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。宣告有兩重含義 1 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的 用到變數或者物件是在別的地方定義的。宣告可以出現多次。2 告訴編譯器,這個名字已經被預定了,別的地方...
定義和宣告
定義 什麼是定義?所謂的定義就是 編譯器 創造乙個物件,為這個物件分配一塊記憶體並給它取上乙個名字,這個名字就是我們常常說的定義名或物件名。但注意,這個名字一旦和這塊記憶體匹配起來 可以想象是這個名字嫁給了這塊空間,沒有要彩禮啊 它們就生死與共,終生不離不棄,並且這塊內 存的位置也不能被改變。乙個變...