1. 程式人生 > >變數的定義和宣告的區別詳解

變數的定義和宣告的區別詳解

感言:我馬上大三了,對計算機也算是有點感興趣,但一直以來我對變數的定義和宣告都很模糊,最開始看書上是這樣講的:定義-->就形如 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;
}	

總結:舉了怎麼多例子,如果你以前也和我一樣對宣告和定義有點模糊,相信你應該有所瞭解了吧,但我其實還有一點沒有想明白為什麼全域性的宣告就可以賦值並且有記憶體空間,可能是編譯器給我們做了手腳,但教科書上是這樣說的:變數的定義只能被定義一次,而宣告可以是多次,記住這一點很重要!