V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thinkIn
V2EX  ›  C

static 自动变量在循环调用中运用的疑惑?

  •  
  •   thinkIn · 2015-05-07 15:35:07 +08:00 · 963 次点击
    这是一个创建于 3479 天前的主题,其中的信息可能已经有所发展或是发生改变。

    void reverse(char s,char *t) //功能未实现,仅作说明
    {
    static int i=0;
    if(*s++)
    reverse(s,t+i);
    if(
    --s!='\0')
    t[i++]=*s;
    }

    所有被调用的函数都将创建一个副本。此处的i应该不会自增才对啊?

    是否是编译器的某种优化?求原因啊。拜谢。

    3 条回复    2015-05-07 16:57:51 +08:00
    comicfans44
        1
    comicfans44  
       2015-05-07 16:08:43 +08:00   ❤️ 1
    函数中的静态变量是全局唯一的(static int i=0 仅被执行一次),所有被调用的函数的局部变量(非static)都将创建一个副本,但其中的静态变量是共享的
    loveuqian
        2
    loveuqian  
       2015-05-07 16:11:51 +08:00
    花括号里就看懂了第一行
    我只知道static定义的变量只赋值1次
    路过。。。
    julykitt
        3
    julykitt  
       2015-05-07 16:57:51 +08:00
    @loveuqian 是只初始化一次,只赋值一次的是const,严格来说const是声明变量只读,但是其实也是可以修改的。

    @comicfans44是对的,static是变量的生命周期是`全局`的,参考C++类的static成员变量
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5508 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 06:56 · PVG 14:56 · LAX 22:56 · JFK 01:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.