为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么这个程序的结果 只有123456789 而没有10:。

#include <stdio.h>

void fn(){

static int i=0;

i++;

printf("fn:i=%d\n",i);

}

int main(){

int i;

for(i=1;i<10;i++){

fn();

}

return 0;

}


正在回答

4 回答

因为你的for循环只有9次,哪来的10

0 回复 有任何疑惑可以回复我~
#1

Fitz 提问者

在fn中第一次改了i的值啊,难道没有影响?
2015-04-10 回复 有任何疑惑可以回复我~
#2

lymo 回复 Fitz 提问者

什么时候第一次改了i的值...不懂
2015-04-10 回复 有任何疑惑可以回复我~
#3

Fitz 提问者 回复 lymo

第一次调用fn()的时候不是静态变量i赋值了一次吗?
2015-04-10 回复 有任何疑惑可以回复我~
#4

lymo 回复 Fitz 提问者

好吧,这不想js那些顺序运行的,是从main入口开始,也就是fn()一共就调用了9次
2015-04-10 回复 有任何疑惑可以回复我~
#5

Fitz 提问者 回复 lymo

这个是我改的上面代码,发现貌似函数fn()里面的i 和主函数中的循环控制变量i好像没有关系,好像是两个i一样!是这样的吗?
2015-04-10 回复 有任何疑惑可以回复我~
#6

Fitz 提问者 回复 lymo

我知道啊,在main主函数中调用了fn函数,第一次循环的时候调用fn的时候不是有个static int i=0;这里对i又重新的赋了一次值!
2015-04-10 回复 有任何疑惑可以回复我~
#7

lymo 回复 Fitz 提问者

这个i是静态局部变量,只影响fn(),对for里面的i起作用,只是名字相同罢了
2015-04-10 回复 有任何疑惑可以回复我~
#8

lymo 回复 lymo

不起作用。。
2015-04-10 回复 有任何疑惑可以回复我~
#9

Fitz 提问者 回复 lymo

ok谢谢
2015-04-10 回复 有任何疑惑可以回复我~
查看6条回复

for循环执行了9次

可以改为for(i=0;i<10;i++)或者for(i=1;i<=10;i++)

0 回复 有任何疑惑可以回复我~

当i=10的时候,循环中的判断是10<10明显为假,就跳出循环了,没有再一次调用fn();。要解决这个问题,你需要把for循环中的i<10改成i<=10。

0 回复 有任何疑惑可以回复我~

for 循环里面没有执行到   应该把i<10  改成 i <= 10

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问为什么这个程序的结果 只有123456789 而没有10:。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信