自動變量具有以下特點(diǎn):
1. 自動變量的作用域僅限于定義該變量的個體內(nèi)。在函數(shù)中定義的自動變量,只在該函數(shù)內(nèi)有效。在復(fù)合語句中定義的自動變量只在該復(fù)合語句中有效。 例如:
int kv(int a)
{
auto int x,y;
{ auto char c;
} /*c的作用域*/
……
} /*a,x,y的作用域*/
2. 自動變量屬于動態(tài)存儲方式,只有在使用它,即定義該變量的函數(shù)被調(diào)用時才給它分配存儲單元,開始它的生存期。函數(shù)調(diào)用結(jié)束,釋放存儲單元,結(jié)束生存期。因此函數(shù)調(diào)用結(jié)束之后,自動變量的值不能保留。在復(fù)合語句中定義的自動變量,在退出復(fù)合語句后也不能再使用,否則將引起錯誤。例如以下程序:
main()
{ auto int a,s,p;
printf("\ninput a number:\n");
scanf("%d",&a);
if(a>0){
s=a+a;
p=a*a;
}
printf("s=%d p=%d\n",s,p);
}
s,p是在復(fù)合語句內(nèi)定義的自動變量,只能在該復(fù)合語句內(nèi)有效。而程序的第9行卻是退出復(fù)合語句之后用printf語句輸出s,p的值,這顯然會引起錯誤。
3. 由于自動變量的作用域和生存期都局限于定義它的個體內(nèi)( 函數(shù)或復(fù)合語句內(nèi)), 因此不同的個體中允許使用同名的變量而不會混淆。 即使在函數(shù)內(nèi)定義的自動變量也可與該函數(shù)內(nèi)部的復(fù)合語句中定義的自動變量同名。例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ù)中和復(fù)合語句內(nèi)兩次定義了變量s,p為自動變量。按照C語言的規(guī)定,在復(fù)合語句內(nèi),應(yīng)由復(fù)合語句中定義的s,p起作用,故s的值應(yīng)為a+ a,p的值為a*a。退出復(fù)合語句后的s,p 應(yīng)為main所定義的s,p,其值在初始化時給定,均為100。從輸出結(jié)果可以分析出兩個s和兩個p雖變量名相同, 但卻是兩個不同的變量。
4. 對構(gòu)造類型的自動變量如數(shù)組等,不可作初始化賦值。
相關(guān)推薦:計算機(jī)等考二級C語言備考:C語言/C++編譯過程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |