2012-10-21 208 views
1
#include <stdio.h> 
int g; 
void afunc(int x) 
{ 
    g = x; /* this sets the global to whatever x is */ 
} 

int main(void) 
{ 
    g = 10; /* global g is now 10 */ 
    afunc(20); /* but this function will set it to 20 */ 
    printf("%d\n", g); /* so this will print "20" */ 

    return 0; 
} 

的printf的輸出是20 但本地變量g = 10,所以 爲什麼它被打印的20,而不是10 不會局部變量具有比全局變量更多範圍?全局變量和局部變量混淆

+0

代碼中的實際註釋解釋了它。 XD – Archimaredes

回答

1

因爲它沒有出現,你實際上宣佈一個新的變量。你剛纔提到 g = 10;

您實際上沒有定義一個新變量,只是簡單地引用了一個全局變量。希望這可以幫助。

3

的printf的輸出是20,但在本地變量g = 10,所以它爲什麼 是印刷20,而不是10

您還沒有改變的局部變量。您的行main

g = 10; 

正在改變全局變量。同樣,對afunc的函數調用改變了全局變量。你的整個程序只有一個變量g,這是全球性的。

3

您的示例中沒有名爲g的局部變量。只有全球一個。所以預計產量。

如果你想叫g一個局部變量,試試這個:

int main(void) 
{ 
    int g = 10; /* local g, initialized with 10 */ 
    ... 

上述規定,你現在有兩個不同的變量叫g,其中一個明顯的只在main