c語言變量的存儲類型,變量的初始化

內容來源:C和指針(第二版),人民郵電出版社。

我太懶了,直接剪貼了書上的內容,講得比較詳細。書上用的c語言的版本是ANSI 90,有點過時了。

總結起來就是:

一、存儲類型

即指存儲變量值的內存類型,有普通內存、運行時堆棧、硬件寄存器。

默認存儲類型與變量聲明位置有關:像全局變量這樣代碼塊之外聲明的變量存儲在靜態內存中,不在堆棧裏,程序執行期間始終存在;代碼塊內聲明的變量默認存儲類型是自動的(automatic),稱爲自動(auto)變量,存儲在堆棧中,執行到代碼塊時被創建,代碼塊執行完即被銷燬。

注意!可以給自動變量加上關鍵字static,將它變爲靜態存儲類型,它就會在程序運行期間一直存在,但是它的作用域是不變的,代碼塊外面還是不能用這個變量。

//自動變量轉靜態變量之後作用域不變,舉個例子: 
#include<stdio.h>
int main() {
	int a=10;printf("%d\n",a); 
	{
		static int b=9;
		printf("%d\n",b); 
	} 
	//把下面這行註釋掉,就可以正常輸出10和9.
	//不註釋就會報錯:[Error] 'b' was not declared in this scope. 
	//printf("%d\n",b); 
	return 0;
}

還有register存儲類型,內容自己看吧,主要注意不要給很多變量都添加register關鍵字的聲明,自己亂用register可能程序性能不升反降。

二、初始化

靜態變量不顯式初始化,會被自動初始化爲0。

自動變量不顯式初始化,裏面的將會是廢值。

但是如果自動變量顯式地初始化了,其效果就是在代碼塊的起始處插入一條隱式的賦值語句,其結果就是:①自動變量初始化了,和它在代碼塊裏給他賦值效率上沒什麼區別(聲明爲const的變量除外);②這條隱式的賦值語句在代碼塊每次使用時都會執行一次;③優點:可以用任何表達式爲自動變量賦值;④不顯式初始化得到的是廢值。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章