V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
thinkIn
V2EX  ›  C

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

  •  
  •   thinkIn · May 7, 2015 · 1550 views
    This topic created in 4013 days ago, the information mentioned may be changed or developed.

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

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

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

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

    @comicfans44是对的,static是变量的生命周期是`全局`的,参考C++类的static成员变量
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   761 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 21:17 · PVG 05:17 · LAX 14:17 · JFK 17:17
    ♥ Do have faith in what you're doing.