我正在使用書籍 C 編程一種現代方法來學習 C 中的全域變數。
下面給出了書中的一個例子,為什么對多個函式使用相同的全域變數是個壞主意。我不明白為什么函式只print_all_rows執行print_one_row一次。
假設我先呼叫函式print_one_row,然后呼叫函式print_all_rows。程式開始時i編譯器默認設定為 0。一旦程式完成print_one_row函式的執行,其值為i11。
程式進入 function print_all_rows,設定i為 1,呼叫 functionprint_one_row然后遞增i到 12 而不是 2。
如果我將值更改為 1,為什么它會i增加到 12 而不是 2 i?
int i;
void print_one_row(void)
{
for (i = 1; i <= 10; i )
printf ("*" ) ;
}
void print_all_rows(void) {
for (i = 1; i <= 10; i ) {
print_one_row();
printf ("\n") ;
}
}
uj5u.com熱心網友回復:
在print_all_rows中,就在第一次呼叫 之前print_one_row,i值為 1。
然后print_one_row被呼叫。當該函式回傳時,i其值為 11。然后計算回圈增量,print_all_rows從i11 增加到 12,然后計算條件為假,然后print_all_rows回傳。
uj5u.com熱心網友回復:
因為i是 glocal 變數(兩個函式通用),它的值是11在第一次呼叫print_one_row. 使用此值 (11)for回圈的第二次迭代print_all_rows退出并且不再呼叫print_one_row.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/473152.html
標籤:C
