有没有人解释一下或者是我为什么感觉会是12

有没有人解释一下,为什么我感觉是12

img


int a=10;
void f()
{  int a=12;
}
int main()
{
f();
printf("%d", a);
return 0;
}

f函数中的a是一个局部变量,它的作用域就在自己这个f函数中起作用,就像东边住着的小明和西边住着的小明,不会混淆的。

int a=10;是声明了一个全局变量a,它的值为10;在f()函数中:int a=12;是在这个函数里面又声明了一个变量(局部变量)a,设置它的值为12,并没有改变函数外面那个全局变量a(它们并没有关系,只是名字一样而已)。
printf("%d", a);输出的是那个全局变量a的值,即10。
要想改变全局变量a的值,你把f()函数里面的那个int去掉,这样就不是声明一个局部变量了,就会给a重新赋值为12。

img

这题考的是变量的作用域知识
你虽然定义了一个全局的a,那你知道,a 是存放在静态存储区的
然后你又在f() 中定义了一个 a,这个是临时变量,是在栈上
这两个变量完全是两个完全不一样的东西
明白了否?

兄弟啊,怎么说呢,计算机就是这样得按照它的来记,感觉就是10,就OK啦