比較就會發(fā)現(xiàn)它們的不同之處了。靜態(tài)變量在下一節(jié)要說的遞歸函數(shù)中經(jīng)常使用到。
當?shù)谝淮尾恢该黛o態(tài)變量的初始值時,默認為0。
下面舉一個例子,把我們說到的靜態(tài)變量理解一下。
求1+2+……+100的值
void add();
int result;
main()
{
int i;
result=0;
for(i=0;i<100;i++) add();
printf(%d\n,result);
}
void add()
{
static int num=0;
num++;
result+=num;
}
add()函數(shù)被調(diào)用了100次,num的值從1一直變到100,這樣就可以求出它們的和了。如果寫成int num=0;那就是求1+1+……+1這100個1的值了。
實際上類似的這類問題我們可以通過遞歸函數(shù)來解決,什么是遞歸,我們下一節(jié)介紹。
3.外部存儲類型
外部存儲類型聲明了程序?qū)⒁玫降、但尚未定義的外部變量。通常,外部存儲類型都是用于聲明在另一個轉(zhuǎn)換單元中定義的變量。下面舉一個例子,這個例子包括兩個文件。
/*1.C*/
void a();
main()
{
extern int num;
a();
printf(%d\n,num);
}
/*2.C*/
int num;
void a()
{
num=5;
}
這兩個程序是分別編譯的,然后連接成一個執(zhí)行文件。具體如何操作,可以查看一些手冊,這兒我簡單說了一下。把上面兩個文件都編譯好后,再制作一個.prj文件,里面的內(nèi)容是:
1.c
2.c
只有這兩行,這可在編輯狀態(tài)下寫成,存盤,取名為1.prj。
然后選擇project選項,選擇project name,填入1.prj文件名,按F9后,即可生成1.exe文件。
main()函數(shù)中變量num是在另一個文件中定義的。因此,當編譯器編譯1.c時,無法確定該變量的地址。這時,外部存儲類型聲明告訴編譯器,把所有對num的引用當作暫且無法確定的引用,等到所有便宜好的目標代碼連接成一個可執(zhí)行程序模塊時,再來處理對變量num的引用。
外部變量的聲明既可以在引用它的函數(shù)的內(nèi)部,也可以在外部。如果變量聲明在函數(shù)外部,那么同一轉(zhuǎn)換單元內(nèi)的所有函數(shù)都可以使用這個外部變量。反之,如果在函數(shù)內(nèi)部,那么只有這一個函數(shù)可以使用該變量。
相關(guān)推薦:計算機等級考試二級C語言教程匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |