二、全局變量
全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。 它不屬于哪一個函數(shù),它屬于一個源程序文件。其作用域是整個源程序。在函數(shù)中使用全局變量,一般應(yīng)作全局變量說明。 只有在函數(shù)內(nèi)經(jīng)過說明的全局變量才能使用。全局變量的說明符為extern。但在一個函數(shù)之前定義的全局變量,在該函數(shù)內(nèi)使用可不再加以說明。 例如:
int a,b; /*外部變量*/
void f1() /*函數(shù)f1*/
{
……
}
float x,y; /*外部變量*/
int fz() /*函數(shù)fz*/
{
……
}
main() /*主函數(shù)*/
{
……
}/*全局變量x,y作用域 全局變量a,b作用域*/
從上例可以看出a、b、x、y 都是在函數(shù)外部定義的外部變量,都是全局變量。但x,y 定義在函數(shù)f1之后,而在f1內(nèi)又無對x,y的說明,所以它們在f1內(nèi)無效。 a,b定義在源程序最前面,因此在f1,f2及main內(nèi)不加說明也可使用。
[例5.12]輸入正方體的長寬高l,w,h。求體積及三個面x*y,x*z,y*z的面積。
int s1,s2,s3;
int vs( int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
main()
{
int v,l,w,h;
printf("\ninput length,width and height\n");
scanf("%d%d%d",&l,&w,&h);
v=vs(l,w,h);
printf("v=%d s1=%d s2=%d s3=%d\n",v,s1,s2,s3);
}
本程序中定義了三個外部變量s1,s2,s3, 用來存放三個面積,其作用域為整個程序。函數(shù)vs用來求正方體體積和三個面積, 函數(shù)的返回值為體積v。由主函數(shù)完成長寬高的輸入及結(jié)果輸出。由于C語言規(guī)定函數(shù)返回值只有一個,當(dāng)需要增加函數(shù)的返回數(shù)據(jù)時,用外部變量是一種很好的方式。本例中,如不使用外部變量, 在主函數(shù)中就不可能取得v,s1,s2,s3四個值。而采用了外部變量,在函數(shù)vs中求得的s1,s2,s3值在main 中仍然有效。因此外部變量是實現(xiàn)函數(shù)之間數(shù)據(jù)通訊的有效手段。對于全局變量還有以下幾點說明:
1. 對于局部變量的定義和說明,可以不加區(qū)分。而對于外部變量則不然,外部變量的定義和外部變量的說明并不是一回事。外部變量定義必須在所有的函數(shù)之外,且只能定義一次。其一般形式為: [extern] 類型說明符 變量名,變量名… 其中方括號內(nèi)的extern可以省去不寫。
例如: int a,b;
等效于:
extern int a,b;
而外部變量說明出現(xiàn)在要使用該外部變量的各個函數(shù)內(nèi),在整個程序內(nèi),可能出現(xiàn)多次,外部變量說明的一般形式為:extern 類型說明符 變量名,變量名,…;外部變量在定義時就已分配了內(nèi)存單元,外部變量定義可作初始賦值,外部變量說明不能再賦初始值,只是表明在函數(shù)內(nèi)要使用某外部變量。
2. 外部變量可加強函數(shù)模塊之間的數(shù)據(jù)聯(lián)系 但是又使函數(shù)要依賴這些變量,因而使得函數(shù)的獨立性降低。從模塊化程序設(shè)計的觀點來看這是不利的,因此在不必要時盡量不要使用全局變量。
3. 在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),全局變量不起作用。
[例5.13]
int vs(int l,int w)
{
extern int h;
int v;
v=l*w*h;
return v;
}
main()
{
extern int w,h;
int l=5;
printf("v=%d",vs(l,w));
}
int l=3,w=4,h=5;
本例程序中,外部變量在最后定義,因此在前面函數(shù)中對要用的外部變量必須進行說明。外部變量l,w和vs函數(shù)的形參l,w同名。外部變量都作了初始賦值,mian函數(shù)中也對l作了初始化賦值。執(zhí)行程序時,在printf語句中調(diào)用vs函數(shù),實參l的值應(yīng)為main中定義的l值,等于5,外部變量l在main內(nèi)不起作用;實參w的值為外部變量w的值為4,進入vs后這兩個值傳送給形參l,wvs函數(shù)中使用的h 為外部變量,其值為5,因此v的計算結(jié)果為100,返回主函數(shù)后輸出。變量的存儲類型各種變量的作用域不同,就其本質(zhì)來說是因變量的存儲類型相同。所謂存儲類型是指變量占用內(nèi)存空間的方式,也稱為存儲方式。
相關(guān)推薦:
2012年軟考系統(tǒng)分析師考試60天完美復(fù)習(xí)計劃
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |