#include "stdio.h"void incr(){static s=0;++s;printf("%d\n",s);}main(){incr();incr();incr();}
3 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
要是s前面不加static修饰,结果当然就会是111,但加上后,就变成了123,
原因在于静态局部变量改变了变量的生存期.局部变量是存储在栈中,但静态局部变量是存储在静态内存区,作用域是整个程序,所以函数每次被调用,对静态局部变量,不会再对他初始化,它可以记录函数的调用次数.
但它的作用域没变,在函数体外还是不能引用它,
函数式编程
TA贡献1807条经验 获得超9个赞
s没定义.
static int s=0;
表示静态变量,程序运行完后,仍在内存中,
第一次incr();s=1,输出1
第2次incr();s=2,输出2
第3次incr();s=3,输出3
千万里不及你
TA贡献1784条经验 获得超9个赞
#include "stdio.h"
void incr()
{
static s=0; //static 类型只初始化一次
++s;
printf("%d\n",s);
}
main()
{
incr(); //s=1
incr(); //由于s为static,s的值仍为1,现在++s后变成2
incr(); //3 解释同上
}
添加回答
举报
0/150
提交
取消