printf输出顺序问题与i++、++i

printf输出顺序问题与i++、++i

printf()

今天遇到类似这样一道编程题:

#include<stdio.h>

int main()
{
	int i = 0;
	printf("++i,++i,++i,++i,++i,++i  =  ");
	printf("%d %d %d %d %d %d\n",++i,++i,++i,++i,++i,++i);
	i=0;
	printf("i++,i++,i++,i++,i++,i++  =  ");
	printf("%d %d %d %d %d %d\n",i++,i++,i++,i++,i++,i++);
	
	i=0;
	printf("i++,i++,i++,++i,++i,++i  =  ");
	printf("%d %d %d %d %d %d \n",i++,i++,i++,++i,++i,++i);
	
	i=0;
	printf("++i,++i,++i,i++,i++,i++  =  ");
	printf("%d %d %d %d %d %d\n",++i,++i,++i,i++,i++,i++);

	i=0;
	printf("++i,++i,i,i,i++,i++  =  ");
	printf("%d %d %d %d %d %d\n",++i,++i,i,i,i++,i++);
}

输出结果:
在这里插入图片描述

编程环境是:VS2010、win10
在这里插入图片描述
总结一下:
printf()从右往左输出;
如果输出为 i++,则输出当前 i 后立马赋值 i = i + 1;否则输出位置为 ++i 或者 i 时,先进行完所有运算再输出 i 的最终值。

" = "与i++、++i

#include<stdio.h>

int main()
{
	int i;
	int num;
	
	i=0;
	num=(i++)+(i++)+(i++)+(i++)+(i++);
	printf("num = (i++)+(i++)+(i++)+(i++)+(i++) = %d\n",num);//0+0+0+0

	i=0;
	num = (++i)+(++i)+(++i)+(++i)+(++i);
	printf("num = (++i)+(++i)+(++i)+(++i)+(++i) = %d\n",num); //5+5+5+5+5

	i=0;
	num = (++i)+(++i)+(i++)+(i++)+(i++);
	printf("num = (++i)+(++i)+(i++)+(i++)+(i++) = %d\n",num); // 5+5+0+0+0

	i=0;
	num = (++i)+(++i)+(++i)+(i)+(i++);
	printf("num = (++i)+(++i)+(++i)+(i)+(i++) = %d\n",num); //5+5+5+0+0

}

在这里插入图片描述
对于等式来说,是先对 i 和 i++ 中的 i 赋值,再最后对 ++i 中的 i 赋值,然后运算。

(20220716更新)

评论区提醒和编译器有关;
补充一张在Ubuntu上的运行结果;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值