for循环的三个表达式

首先我们我来一段代码,看看它有什么错误:

for(i = 0,printf("First = %d\t",i);
	i < 5,printf("Second = %d\t",i);
	i++,printf("Third = %d\t",i))
{
	printf("Fourth = %d\n",i);
}

有没有感觉for循环里面的表达式好复杂,但是语句绝对没有错误编译没有错误,但是运行呢?

但是是一个死循环,一直都跳不出来。

问题在于for循环的语句形式是:

for(表达式1;表达式2;表达式3){}

而表达式1和表达式2都是逗号表达式,逗号表达式的用法不细说了,最终的值是最后一个表达式的值。

也就是printf这个函数的返回值,printf的函数的返回值是打印出来的字符的个数

来看我调试的结果:

当i=0时,for循环体内执行后:

1)执行表达式3: i++; i=1,printf表达式的值是“Third = 1”数一下是9个字符,有两个空格,别忘了还有后面的“\0”,总共是10个字符。

2)然后计算表达式2: i<5, printf表达式的值是“Second = 2”是11个字符,表达式=11,为真,进入循环体。

3)执行循环体输入i,然后再是表达式3,i++; i=2;

因为表达式2的值永远为真,所以循环一直在运行,我改了一下可以参考:

int main()
{
	int i;
	for(i=0;
		i<3;
		i++)
	{
		printf("i=%d\n",i);
	}
	for(i = 0,printf("First = %d\t",i);
		printf("Second = %d\t",i),i < 5;
		i++,printf("Third = %d\t",i))
	{
		printf("Fourth = %d\n",i);
	}
	printf("\n");
	printf("2/(-2) = %d\t",2/(-2));
	printf("2%%(-2) = %d\t",2%(-2));
	system("pause");
	return 0;
}

看一下运行结果:

说明:

1)表达式1的first是赋初值,只执行一次。

2)表达式2Second是条件判断,条件满足执行循环体,然后再是表达式3,注意顺序。

3)从结果可以看出第一次的顺序是1,2,4,3  再后面的顺序是:

     2(表达式2),4(循环体),3(表达式3)

     2(表达式2),4(循环体),3(表达式3),

     直到最后判断表达式2的结果为假,循环退出。

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值