人造人 发表于 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

谢谢楼主分享
页: 1 [2] 3
查看完整版本: 第002讲:【*】使用 static 的三个理由