c语言中的自增问题

c语言中的自增问题

#include <stdio.h>
int main(void)
{
	int a=0;
	int b=a++;
	printf("a++=%d,b=%d,a++=%d\n",a++,b,a++);
	printf("a=%d\n",a);
	return 0;
}

代码分析:
a=0
b=a++
给b赋值的时候,由于a++是后自增,所以赋给b的值是a自增之前的值0,经过给b赋值后a++自增过程完成,a的值变为1;
printf(“a++=%d,b=%d,a++=%d\n”,a++,b,a++);
对于第一条打印语句,对于第一个a++的值,由于是后自增,a的值暂时不变为1,第一个输出值应为1,b的值没有变化为0;第三个输出值,由于第一个输出表达式已经运行,a++已经完成,此时的a=2,同时经过后自增a的值暂时并不变化,因此第三个输出的值应为2;
printf(“a=%d\n”,a);
对于第二条打印语句,a的值共计经过三次后自增,应为3;
然而实际输出结果为

a++=2,b=0,a++=1
a=3

问题在哪儿呢?
原因竟然是,printf()函数的执行顺序是从右到左!
这样的话一切都可以解释的通了,害!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值