在看了別人的程式之後,看到別人的範例很愛用static 的型態
本來只是在複習static 的用法而已
意外的找到一篇還不錯的文章
之前旁邊的學弟問我,全域變數和區域變數名稱一樣,會有什麼結果……
當時我還沒有辦法理解,現在已經有了非常明確的答案了
在第3章scope裡面,說得非常清楚
嗯,接下來就是需要實作了
int same_name;
int ans;
int k1(void){
int same_name=10; //區域變數 same_name
return same_name;
//回傳區域變數same_name
//在離開副程式後,全域變數same_name 會將數值存回原本全域變數的數值
}
int k2(void){
same_name=20; //全域變數 same_name 數值為20
return same_name;
}
int main(void){
same_name=30;//全域變數 same_name 數值為30
ans=k1();
ans=k2();
while(1);
}
一個非常有趣的問題,不過我覺得,還是不要出現這樣的問題比較好,因為在debug上我覺得會造成困擾才對。
那麼練習下一個問題
void a1 ( void){
static int b=0;
b++;
}
void a2 ( void){
int b=0;
b++;
}
int main(void){
int i;
for (i=0;i<10;i++)a1( );
//此時b值為10,因為static變數 的關係,程式使用完,還會保留資料。
for (i=0;i<10;i++)a2( );
//此時b值為1,因為是local 變數,用過即丟。
while(1);
}
原來,我對C語言,仍舊一知半解……
沒有留言:
張貼留言