人造人
发表于 2014-10-29 22:06:06
#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;
}
environmentc2
发表于 2015-2-5 21:36:42
总算知道static int iVscrollPos为什么没有初始化就可以使用了。。。纠结了很久
environmentc2
发表于 2015-2-5 21:37:45
总算知道static int iVscrollPos为什么没有初始化就可以使用了。。。纠结了很久
lt573152873
发表于 2015-2-23 16:25:11
了解甚多
月之吟
发表于 2015-3-28 19:48:41
原来static还有这些用法 0.0
flow
发表于 2015-5-18 14:46:06
本帖最后由 flow 于 2015-5-18 14:51 编辑
人造人 发表于 2014-10-29 22:06
wangsidadehao
发表于 2015-6-1 17:35:43
楼主辛苦~~~~
fred_tan
发表于 2016-11-24 18:17:20
static初始化是不是为0,取决于编译器。
fishermanmax
发表于 2017-1-11 00:21:36
#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:}
小猪上吊ing
发表于 2017-2-24 09:36:09
小溪青石 发表于 2014-6-19 20:31
应该是只执行了一次,从未执行就不对了吧。
看了下原贴,有评论说这个问题“如果static int count = 10; 被当做一个正常的语句执行,会在每次调用fun函数的时候都将count初始化成10,显然事实不是这样。
所以这条赋值语句虽然写在那里,但其实没有在代码编译后的机器指令里存在。既然赋值语句都没有执行,它的初始值为什么会是10呢?事实上在编译阶段,就把可执行文件中为这个变量分配的静态存储区的值给赋成了10,程序在加载的时候将10直接读入内存,而不会有“赋值”这个动作了。”
bingma1
发表于 2017-7-24 20:38:06
非常感谢 甲鱼哥 我明白了
dbq
发表于 2017-10-19 18:34:33
长知识了。。。。
DadingVIP
发表于 2018-4-1 09:16:36
很赞
DadingVIP
发表于 2018-4-1 09:21:19
fishermanmax 发表于 2017-1-11 00:21
#include
int a;
因为a是全局变量呀,初始化也默认是0的
溯影
发表于 2018-4-14 11:00:30
小甲鱼 发表于 2014-5-11 21:33
如果加了 static,就会对其它源文件隐藏。例如在 a 和 msg 的定义前加上 static,main.c 就看不到它们了 ...
甲鱼哥这个解答精辟{:10_277:},实际上不又是重复了一遍文章中说的么{:10_266:}
zzzgod
发表于 2018-5-13 22:15:24
感谢分享!
华丽转身123
发表于 2018-11-9 02:45:45
我看过
一笑见苍穹
发表于 2019-1-28 21:56:06
OK
Julia999
发表于 2019-4-25 12:33:36
长见识了~
我不是加隆
发表于 2019-9-2 21:41:25
谢谢楼主分享