變數定義和宣告的差別(整理)

2021-09-06 20:37:11 字數 1141 閱讀 5161

變數的宣告有兩種情況:

1、一種是須要建立儲存空間的。比如:int a 在宣告的時候就已經建立了儲存空間。

2、還有一種是不須要建立儲存空間的。 比如:extern int a 當中變數a是在別的檔案裡定義的。

宣告是向編譯器介紹名字--識別符號。它告訴編譯器「這個函式或變數在某處可找到,它的模樣象什麼」。

而定義是說:「在這裡建立變數」或「在這裡建立函式」。它為名字分配儲存空間。不管定義的是函式還是變數,編譯器都要為它們在定義點分配儲存空間。對於變數,編譯器確定變數的大小,然後在記憶體中開闢空間來儲存其資料,對於函式,編譯器會生成**,這些**終於也要占用一定的記憶體。

總之就是:把建立空間的宣告成為「定義」,把不須要建立儲存空間的成為「宣告」。

基本型別變數的宣告和定義(初始化)是同一時候產生的;而對於物件來說,宣告和定義是分開的。

比如:類a

假設a a;就是乙個宣告,告訴編譯器a是a類的乙個物件變數,可是不進行初始化;

假設以後a=new a();這就是初始化,分配了空間。

(我們宣告的終於目的是為了提前使用,即在定義之前使用,假設不須要提前使用就沒有單獨宣告的必要,變數是如此,函式也是如此,所以宣告不會分配儲存空間,僅僅有定義時才會分配儲存空間。)

用static來宣告乙個變數的作用有二:

(1)對於區域性變數用static宣告,則是為該變數分配的空間在整個程式的執行期內都始終存在。

(2)外部變數用static來宣告,則該變數的作用僅僅限於本檔案模組。

補充:所謂定義就是(編譯器)建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們常常所說的變數名或物件名。

宣告有2重含義:

(1) 告訴編譯器,這個名字已經匹配到一塊記憶體上,以下的**用到變數或者物件是在別的地方定義的。宣告能夠出現多次。

(2) 告訴編譯器,這個名字已經被預定了,別的地方再也不能用它來作為變數名或物件名。

定義和宣告的最重要差別就是:

定義建立物件並為這個物件分配了記憶體,宣告沒有分配記憶體。

參考文獻:

《c語言深度解剖》  北京航空航天大學出版社   陳正衝    p2-p3

變數定義和宣告的差別(整理)

變數的宣告有兩種情況 1 一種是須要建立儲存空間的。比如 int a 在宣告的時候就已經建立了儲存空間。2 還有一種是不須要建立儲存空間的。比如 extern int a 當中變數a是在別的檔案裡定義的。宣告是向編譯器介紹名字 識別符號。它告訴編譯器 這個函式或變數在某處可找到,它的模樣象什麼 而定...

變數的定義和宣告

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

變數定義和宣告的區別

所謂定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。宣告有兩重含義 1 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的 用到變數或者物件是在別的地方定義的。宣告可以出現多次。2 告訴編譯器,這個名字已經被預定了,別的地方...