C 變數的宣告與定義

2021-07-25 17:56:02 字數 901 閱讀 2227

宣告,是用以告訴編譯器型別及其細節,本身並不涉及記憶體分配;

定義,即記憶體分配,編譯器將在相對記憶體位址上為其物件定址。

定義的同時也作了宣告,當定義的時候我們肯定已經告知編譯器其型別及細節,然後才能分配記憶體。總體來說,它們的根本區別就是有無記憶體的分配,下面具體分析:

int x;         //定義x,已為x分配記憶體,但值未知

int x=1; //定義x,已為x分配記憶體,值初始化為1

extern

int x; //使用關鍵字extern宣告x,告知編譯器x型別及其它細節,但未分配記憶體。

//其定義可以在本.cpp中定義,也可以在其它.cpp中定義,

//原因是由於extern關鍵字,更多細節參見extern解析

另外,extern int x=1也被當做定義,雖然用了extern來修飾,注意此句若放在函式內部,包括main(),會報錯:不允許對外部變數的區域性宣告使用初始值設定項。因為這是毫無意義的,讀者可以參考stackoverflow的一篇帖子。

如果是類成員變數呢?

class tree

;int tree::num; //這是定義

定義時分配記憶體,static定義的變數放在全域性/靜態儲存區。只要程式正確執行,不管我們有沒有使用類tree定義物件,靜態成員變數num都已經在記憶體中存在,而普通變數height只有在定義類物件時才會出現。讀者可以除錯並監視即可得到證實。

文章**我的個人部落格:

C語言變數的宣告與定義

跟同事討論 時,經常冒出宣告乙個變數 定義乙個變數的話。雖然感覺沒什麼差別,但總是混淆不清,心裡難受。查下資料,總結做個筆記總是沒錯的。一 兩者的定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。用於向程式表明變數的型別和名字,乙個變數可以有多個宣告。在c語言中,所有...

變數的定義與宣告

1 變數的定義 從前面的章節可以看出,程式中所有的東西幾乎都有名字。然而字面量卻是個例外,它沒有名字。那麼使用變數,我們就可以為某個值取名字了。實際上,我們是為系統記憶體中用於儲存資料的某塊空間取名字。ansi c規定 變數必須 先定義 後使用 因此當用c定義變數時,不僅需要指定變數名,而且還必須告...

變數的定義與宣告

我們在程式設計中,時時刻刻都用到變數的定義和變數的宣告,可有些時候我們對這個概念不是很清楚,知道它是怎麼用,但卻不知是怎麼一會事,下面我就簡單的把他們的區別介紹如下 望我的指點對你受益 變數的宣告有兩種情況 1 一種是需要建立儲存空間的。例如 int a 在宣告的時候就已經建立了儲存空間。2 另一種...