C语言中STATIC的问题!

代码如下#include<stdio.h>intfun(intm){staticintn=1;++m;n--;return(m+n);}main(){inta,b;a=f... 代码如下
#include <stdio.h>
int fun(int m)
{
static int n=1;
++m;n--;
return(m+n);
}
main()
{
int a,b;
a=fun(0);b=fun(10);
printf("a=%d,b=%d\n",a,b);
}
为什么b=fun(10)值是10?在a使用一次fun()后n不是应该为2,再在bfun()时m=10,n=2,因此bfun()值不应该是12吗?
网路上搜索的资料说STATIC 那条语句事实上并没执行过,例如:
#include <stdio.h>
int fun(void){
static int count = 10; // 事实上此赋值语句从来没有执行过
return count--;
}
int count = 1;
int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= 10; ++count)
printf("%d\t\t%d\n", count, fun());

return 0;
}
那么此代码第一次local static的值10是如何来的?
应如何理解static的唯一一次初始化?
展开
 我来答
樱信全无YX
2012-10-09 · TA获得超过630个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:257万
展开全部
静态变量的值在编译时就决定了,变量放在.DATA的静态变量区。
所以编译完之后的代码不会执行赋值操作了。

这个你需要了解,一般编译完的程序分成3个部分,BSS区,DATA区和TEXT区
更多追问追答
追问
即是说在我摁F5调试前就已经决定了,例如上述第二个代码,因此在我编译时候local static第一个值10就已经存在了 而将要显示的是local static 9这个值?
追答
是的,
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式