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,局部变量的范围比全局变量大吗?

4

3 回答 3

3

printf 的输出是 20。但是局部变量 g = 10,所以为什么要打印 20 而不是 10

您没有更改局部变量。你的线路在main

g = 10;

正在更改全局变量。类似地,函数调用会afunc更改全局变量。你的整个程序只有一个变量g,那就是全局变量。

于 2012-10-21T12:22:19.853 回答
3

g您的示例中没有调用局部变量。只有一个全球性的。所以输出是预期的。

如果你想要一个名为 的局部变量g,试试这个:

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

有了上面的内容,您现在有两个不同的变量,称为g,其中一个仅在 中可见main

于 2012-10-21T12:22:32.467 回答
1

因为看起来您实际上并没有声明一个新变量。你刚才提到 g = 10;

您实际上并没有定义一个新变量,只是引用了一个全局变量。希望这可以帮助。

于 2012-10-21T12:29:11.073 回答