int f() { static int i=0; int s=1; s+=i; i++; return s; }
答案:3 悬赏:70 手机版
解决时间 2021-03-24 23:10
- 提问者网友:王者佥
- 2021-03-24 14:20
int f() { static int i=0; int s=1; s+=i; i++; return s; }
最佳答案
- 五星知识达人网友:污到你湿
- 2021-03-24 15:49
#include
int f() {
static int i = 0;
int s = 1;
s += i;
i++;
return s;
}
int main() {
int i,a = 0;
for(i = 0; i < 5;i++) a += f();
printf("%d\n",a);
return 0;
}
追问刚好这里不太明白,为什么S=1,不变,就拿第三步来说 s=s+i 应该是=2+2=4 为什么会是1+2=3?追答注意到,在函数f()中,i是静态变量,s是自动变量,f()函数结束后,i不会因为函数结束而消亡,所以i的值也已知存在,但变量s确不同,函数f()运行时存在,结束后s就消亡。这是静态变量和自动变量(局部变量)重要差别之一。
int f() {
static int i = 0;
int s = 1;
s += i;
i++;
return s;
}
int main() {
int i,a = 0;
for(i = 0; i < 5;i++) a += f();
printf("%d\n",a);
return 0;
}
追问刚好这里不太明白,为什么S=1,不变,就拿第三步来说 s=s+i 应该是=2+2=4 为什么会是1+2=3?追答注意到,在函数f()中,i是静态变量,s是自动变量,f()函数结束后,i不会因为函数结束而消亡,所以i的值也已知存在,但变量s确不同,函数f()运行时存在,结束后s就消亡。这是静态变量和自动变量(局部变量)重要差别之一。
全部回答
- 1楼网友:想偏头吻你
- 2021-03-24 17:25
函数f中变量i为静态变量,函数f调用结束后变量i所占据的存储单元不会释放,而在主函数中f被调用5次,具体过程如下: 第1次调用f:s=s+i=1+0=1,i=i+1=1,主函a=a+f()=0+1=1 第2次调用f:s=s+i=1+1=2,i=i+1=2,主函数中a=a+f()=1+2=3 第3次调用f:s=s+i=1+2=3,i=i+1=3,主函数中a=a+f()=3+3=6 第4次调用f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10 第5次调用f:s=s+i=1+4=5,i=i+4=5,主函数中a=a+f()=10+5=15 所以printf语句的输出结果为15。
- 2楼网友:一秋
- 2021-03-24 15:59
不给分
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯