关于全局变量的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 01:27:19
#include <stdio.h>
int d=1;
int fun(int p)
{
int d=5;
d+=p++;
printf("%d ",d);
return d;
}

main()
{
int a=3;
fun(a);
d+=a++;
printf("%d\n",d);
}

最前面的d定义成了全局变量。
运行时先经过fun()函数,d变成了8,再经d+=a++;
d变成11啊。
但是实际的结果是8 4,说明经d+=a++时,d的值是1,为什么d作为全局变量,在经过fun()函数运算的时候,d变成8后,到main()又成1了呢?

在 fun() 里, 你又定义了一个局部变量 “d”, 因此在 fun() 里,所有使用 d 的地方,其实都是指这个局部变量, 而那个全局变量 d 你可以理解成在 fun() 里被屏蔽掉了,因此全局变量 d 的值在调用 fun()前后没有发生任何变化,当然在 main() 里,他在 d+=a++ 的时候,值还是1。

int fun(int p)
{
int d=5;
d+=p++;
printf("%d ",d);
return d;
}

这里用到的d是局部变量d不是全局变量d

main里面用到的是全局的

你好

D是全局变量
在FUN函数里的D是你定义的局部变量 而这里面的D和局部变量的D 不一样
如果fun函数里面没有INT D=5 这句的话 就是你说的那样
有这句 那么fun函数里面的d就是你从新定义的局部变量了 那么全部函数d在运行函数的过程中压入堆栈 等这个返回后 回到main主函数 在弹出堆栈