#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;
}
总算知道static int iVscrollPos为什么没有初始化就可以使用了。。。纠结了很久
总算知道static int iVscrollPos为什么没有初始化就可以使用了。。。纠结了很久
了解甚多
原来static还有这些用法 0.0
本帖最后由 flow 于 2015-5-18 14:51 编辑
人造人 发表于 2014-10-29 22:06
楼主辛苦~~~~
static初始化是不是为0,取决于编译器。
#include <stdio.h>
int a;
int main(void)
{
int i;
static char str;
printf("integer: %d;string: (begin)%s(end)", a, str);
return 0;
}
a变量没有声明为static,为什么输出也是0?{:10_280:}
小溪青石 发表于 2014-6-19 20:31
应该是只执行了一次,从未执行就不对了吧。
看了下原贴,有评论说这个问题“如果static int count = 10; 被当做一个正常的语句执行,会在每次调用fun函数的时候都将count初始化成10,显然事实不是这样。
所以这条赋值语句虽然写在那里,但其实没有在代码编译后的机器指令里存在。既然赋值语句都没有执行,它的初始值为什么会是10呢?事实上在编译阶段,就把可执行文件中为这个变量分配的静态存储区的值给赋成了10,程序在加载的时候将10直接读入内存,而不会有“赋值”这个动作了。”
非常感谢 甲鱼哥 我明白了
长知识了。。。。
很赞
fishermanmax 发表于 2017-1-11 00:21
#include
int a;
因为a是全局变量呀,初始化也默认是0的
小甲鱼 发表于 2014-5-11 21:33
如果加了 static,就会对其它源文件隐藏。例如在 a 和 msg 的定义前加上 static,main.c 就看不到它们了 ...
甲鱼哥这个解答精辟{:10_277:},实际上不又是重复了一遍文章中说的么{:10_266:}
感谢分享!
我看过
OK
长见识了~
谢谢楼主分享