定義和聲明的區別

來源:互聯網
上載者:User

標籤:定義和聲明的區別

感言:我馬上大三了,對電腦也算是有點感興趣,但一直以來我對變數的定義和聲明都很模糊,最開始看書上是這樣講的:定義-->就形如 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;}
總結:舉了怎麼多例子,如果你以前也和我一樣對聲明和定義有點模糊,相信你應該有所瞭解了吧,但我其實還有一點沒有想明白為什麼全域的聲明就可以賦值並且有記憶體空間,可能是編譯器給我們做了手腳,但教科書上是這樣說的:變數的定義只能被定義一次,而聲明可以是多次,記住這一點很重要!

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

定義和聲明的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.