一个C语言的基础问题,请大家帮个忙

来源:百度知道 编辑:UC知道 时间:2024/07/07 16:51:44
请看下面的代码:
#include<stdio.h>

void foo();
int x=6;
int main()
{

foo();
printf("x in main = %d\n", x);
return 0;
}

int y;
void foo()
{
y=3;
x=8;
printf("y in foo = %d\n", y);
printf("x in foo = %d\n", x);

}为什么这个结果会是
y in foo=3;
x in foo=8;
x in main=8;
而不是
y in foo=3;
x in foo=8;
x in main=6;

void foo这个并没有影响到main里面的数值吧,再说先前定义了x=6是所有的都可以用的把
如果把int main()改成void main()有区别么

全局变量作用域。根据int定义变量时,同名变量名作用域不同,如同你的foo函数没有使用int x,所以这里使用的是最开始全局变量int x
huang69朋友在你的foo函数中,加入一个int x,定义一个局部变量,自然就使用的是函数内部x,全局变量与局部变量同名时,优先使用局部变量

变量作用域的问题
在void foo()里面使用x变量,会优先使用作用域最小的那个x,如果void foo()里面有x,则使用void foo()里的x,如果没有,则去使用全局中的.

因为你没有在void foo()里声明x变量,所以void foo()用的是全局变量中的x,从而使全局变量X改变.
在void foo()里重新定义一个变量x,可以避免去使用全局中的x.