標籤:定義和聲明的區別
感言:我馬上大三了,對電腦也算是有點感興趣,但一直以來我對變數的定義和聲明都很模糊,最開始看書上是這樣講的:定義-->就形如 int a;這就是定義了一個整形變數,然後就說變數的定義只能是一次而聲明卻可以多次,然後就沒,我也問了好幾個老師,他們也都是這樣說的,我在網上搜的答案也感覺講得不是很細,所以我總覺得這不是我想要的答案,直到我看了<<C陷阱與缺陷>>後才明白了原來裡面還是有很多值得深挖的地方,所以分享給大家,我的所以的例子都是在VC6.0下實驗的,先來看第一個例子: 1:
void main(){extern int a;//定義和聲明不能放在同一個函數裡int a=10; //再定義a=10錯誤cout<<hex<<&a<<endl;}2:
extern int a;//這是聲明void main(){int a=10; //(這是定義)並且這樣定義是對的cout<<hex<<&a<<endl;}3:
void main(){extern int a;//聲明cout<<hex<<&a<<endl;//這說明聲明是不佔記憶體空間的,所以這個取地址是錯誤的}4:
extern int a=10;//全域的聲明占記憶體空間void main(){cout<<a<<endl;cout<<hex<<&a<<endl;}5:
void main(){extern int a=10;//在函數體內聲明不能被初始化cout<<a<<endl;//這是一個錯誤的運算式}6:
extern int a;//說明聲明可以聲明多次,而定義卻只能定義一次extern int a;extern int a;void main(){int a=10;cout<<a<<endl;}總結:舉了怎麼多例子,如果你以前也和我一樣對聲明和定義有點模糊,相信你應該有所瞭解了吧,但我其實還有一點沒有想明白為什麼全域的聲明就可以賦值並且有記憶體空間,可能是編譯器給我們做了手腳,但教科書上是這樣說的:變數的定義只能被定義一次,而聲明可以是多次,記住這一點很重要!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
定義和聲明的區別