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()函数的执行顺序是从右到左!
这样的话一切都可以解释的通了,害!