静态全局变量和静态局部变量的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:10:15
我写了个小程序为了验证全局变量和局部变量的一些特性(静态全局变量的作用域是从定义出开始到文件的结束,静态局部变量的作用域仅限于函数体内部,且每次调用结果不会马上被销毁,就是说下次调用可以用到上次调用的结果),程序如下:
#include<stdio.h>
static int j;//定义静态全局变量
void fun1(void)
{
static int i=0;//定义静态局部变量
i++;
printf("i=%d\n",i);

}
void fun2(void)
{
j=0;
j++;
printf("j=%d\n",j);
}
int main(void)
{
int k;
for(k=0;k<10;k++)
{
fun1();
fun2();

}
return 0;
}
这个程序运行的结果是:i=1;j=1;i=2;j=1;i=3;j=1.........i=10;j=1;
我的疑问是既然静态全局变量和静态局部变量都是存在内存的静态区,那么运行结果应该是:i=1;j=1;i=2;j=2;i=3;j=3.........i=10;j=10;
而结果并非如此,但是不知道为什么会这样,希望高手们不吝赐教,说详细一点,多谢!
j在程序的第二行不是已经定义为静态全局变量了吗?他的作用域可以到函数fun2是吗?

void fun2(void)
{
j=0;
j++;
printf("j=%d\n",j);
}

你这个func2里面的j不是静态变量啊~~~
如果你把这里面的j=0,去掉的话,会得到你要的结果1
但是你在这个函数里定义了一个局部非静态变量,在函数内部,这个变量具有更高的优先权!

楼上的已经解答了,我就不多说了

你虽然在第2行定义了静态变量,可是fun2中定义的局部变量j=0,把全局变量屏蔽了