2010年7月29日 星期四

變數宣告的問題

在看了別人的程式之後,看到別人的範例很愛用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語言,仍舊一知半解……


沒有留言:

張貼留言