當前位置:首頁 > 趣味生活

變量聲明和定義的區別

Q1:C變量聲明和定義的區別

變量的聲明有兩種情況:
(1) 一種是需要建立存儲空間的(定義、聲明)。例如:int a在聲明的時候就已經建立了存儲空間。
(2) 另一種是不需要建立存儲空間的(聲明)。例如:extern int a其中變量a是在別的文件中定義的。
前者是"定義性聲明(defining declaration)"或者稱為"定義(definition)",而後者是"引用性聲明(referncing declaration)"。從廣義的角度來講聲明中包含着定義,但是並非所有的聲明都是定義,例如:int a它既是聲明,同時又是定義。然而對於extern a來講它只是聲明不是定義。一般的情況下我們常常這樣敍述,把建立空間的聲明稱之為"定義",而把不需要建立存儲空間稱之為"聲明"。

Q2:js中變量的聲明和和定義怎麼區別?

var a; // 聲明變量 ;不會被分配內存
a = 0 ;// 定義變量 ;定義就是分配了內存

Q3:C++中函數或者變量的聲明和定義有什麼區別?

void get(char *s);//聲明 ... void get(char *s)//定義
{
...
return;
}

Q4:變量聲明和定義有什麼區別

從編譯原理上來説,聲明是僅僅告訴編譯器,有個某類型的變量會被使用,但是編譯器並不會為它分配任何內存。而定義就是分配了內存。
對於下面的兩句代碼:
void Func()
{
int a;
int b=1;
a=0;
}
對於第一行代碼,編譯器不會做任何事,它不會為它在棧中分配一點東西,直到第三句,a=0;時,編譯器才會將其壓入棧中。而對於int b=0;這一句,編譯器就會生成一條指令,為它賦值。如果反彙編,看到的代碼可能是這樣的:
push 1;
push 0;
當然,並不一定編譯器就會樣做,也有可能在聲明int a時,編譯器就會把一個廢值入棧,到第三條再為其賦值,這要看編譯器的具體取捨,所以,聲明不一定不是定義,而定義一定是定義。
但是,下面的聲明,一定僅僅是聲明:
extern int a;
這表時,有一個int變量a,它一定是在另外其他地方定義的,所以編譯器此時一定不會做什麼分配內存的事,因為它就是聲明,僅僅表明下面的代碼引用了一個符號,而這個符號是int類型的a而已。

[email protected]

猜你喜歡

更多
此页面为HK繁体版,其他版本: 中文简体 | TW 繁体