在程式設計中,時時刻刻都用到變數的定義和變數的宣告,可有些時候我們對這個概念不是很清楚,知道它是怎麼用,但卻不知是怎麼一會事。
下面我就簡單的把他們的區別介紹如下:
變數的宣告有兩種情況:
(1)一種是需要建立儲存空間的(定義、宣告)。
例如:int a在宣告的時候就已經建立了儲存空間。
(2)另一種是不需要建立儲存空間的(宣告)。
例如:extern int a其中變數a是在別的檔案中定義的。
分析:前者是"定義性宣告(defining declaration)"或者稱為"定義(definition)",而後者是"引用性宣告(referncing declaration)"。
從廣義的角度來講宣告中包含著定義,但是並非所有的宣告都是定義。
例如:int a它既是宣告,同時又是定義。然而對於extern a來講它只是宣告不是定義。
一般的情況下我們常常這樣敘述,把建立空間的宣告稱之為"定義",而把不需要建立儲存空間稱之為"宣告"。很明顯我們在這裡指的宣告是範圍比較窄的,也就是說非定義性質的宣告。
例如:在主函式中
int a; //是定義,定義了a為整型的全域性變數
intmain()
全域性變數的"定義"與全域性變數的"宣告"是不相同的,全域性變數的定義只能有一次, 它的位置是在所有函式之外,而同乙個檔案中的全域性變數宣告可以是多次的,它可以在函式之內(哪個函式要用就在那個函式中宣告)也可以在函式之外(在全域性變數的定義點之前)。系統會根據全域性變數的定義(而不是全域性外部變數的宣告)分配儲存空間的。對於全域性變數來講,初始化只能是在"定義"中進
行,而不是在" 宣告"中。
所謂的"宣告",其作用是宣告該變數是乙個已在後面定義過的外部變數,僅僅是在為了"提前"引用該變數而作的"宣告"而已。extern只作宣告,不作定義。
用static來宣告乙個變數的作用有二:
(1) 對於區域性變數用static宣告,則是為該變數分配的空間在整個程式的執行期內都始終存在,區域性的作用域,全域性的生存期。
(2) 全域性變數用static來宣告,則該變數的作用只限於本檔案模組,全域性的作用域,全域性的生存期。
c語言宣告和定義
宣告 普通的宣告,它所說明並非是自身,而是其他地方建立的物件 定義 他為物件分配了記憶體,讓這個物件實實在在的佔據了系統的一塊記憶體。理解c語言宣告的優先順序 a 宣告從它的名字開始讀取,然後按照優先順序順序依次讀取。b 優先順序從高到底依次是 b1 宣告中被括號括起來的那部分 b2 字尾操作符 括...
C語言中宣告和定義的區別
宣告指定了乙個變數的識別符號,用來描述變數的型別,用於編譯器識別變數名所引用的實體。定義是對宣告的實現或者是例項化,為變數分配儲存空間,還可以給變數賦初始值。變數的宣告和定義 int a 需要建立儲存空間 既是定義,也是宣告 extern int a 不需要建立儲存空間 只是宣告,不是定義 如果宣告...
C語言中,宣告和定義的區別
二 針對變數時 三 針對函式時 四 參考 定義就是建立乙個物件,給它分配記憶體並取名字 變數名或物件名 還可以指定初值。另外,乙個變數或物件只能被定義一次,否則編譯器會提示重複定義。用於向程式表明變數的型別和名字。告訴編譯器這個名字已使用,別的地方不能再用它作為變數名或物件名。另外,宣告可以出現多次...