2012-10-21 221 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