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

2015-05-07 15:35:07 +08:00
 thinkIn

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

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

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

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

@comicfans44是对的,static是变量的生命周期是`全局`的,参考C++类的static成员变量

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX