3. 由于自動變量的作用域和生存期都局限于定義它的個體內(nèi)( 函數(shù)或復合語句內(nèi)),因此不同的個體中允許使用同名的變量而不會混淆。 即使在函數(shù)內(nèi)定義的自動變量也可與該函數(shù)內(nèi)部的復合語句中定義的自動變量同名。例5.14表明了這種情況。
[例5.14]
main()
{
auto int a,s=100,p=100;
printf("\ninput a number:\n");
scanf("%d",&a);
if(a>0)
{
auto int s,p;
s=a+a;
p=a*a;
printf("s=%d p=%d\n",s,p);
}
printf("s=%d p=%d\n",s,p);
}
本程序在main函數(shù)中和復合語句內(nèi)兩次定義了變量s,p為自動變量。按照C語言的規(guī)定,在復合語句內(nèi),應(yīng)由復合語句中定義的s,p起作用,故s的值應(yīng)為a+ a,p的值為a*a。退出復合語句后的s,p 應(yīng)為main所定義的s,p,其值在初始化時給定,均為100。從輸出結(jié)果可以分析出兩個s和兩個p雖變量名相同,但卻是兩個不同的變量。
4. 對構(gòu)造類型的自動變量如數(shù)組等,不可作初始化賦值。
二、外部變量外部變量的類型說明符為extern
在前面介紹全局變量時已介紹過外部變量。這里再補充說明外部變量的幾個特點:
1. 外部變量和全局變量是對同一類變量的兩種不同角度的提法。全局變是是從它的作用域提出的,外部變量從它的存儲方式提出的,表示了它的生存期。
2. 當一個源程序由若干個源文件組成時, 在一個源文件中定義的外部變量在其它的源文件中也有效。例如有一個源程序由源文件F1.C和F2.C組成: F1.C
int a,b; /*外部變量定義*/
char c; /*外部變量定義*/
main()
{
……
}
F2.C
extern int a,b; /*外部變量說明*/
extern char c; /*外部變量說明*/
func (int x,y)
{
……
}
在F1.C和F2.C兩個文件中都要使用a,b,c三個變量。在F1.C文件中把a,b,c都定義為外部變量。在F2.C文件中用extern把三個變量說明為外部變量,表示這些變量已在其它文件中定義,并把這些變量的類型和變量名,編譯系統(tǒng)不再為它們分配內(nèi)存空間。對構(gòu)造類型的外部變量, 如數(shù)組等可以在說明時作初始化賦值,若不賦初值,則系統(tǒng)自動定義它們的初值為0。
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |