int main() {
int a=5,b=0;
a=a++;
printf("%d\n",a);
b=a++;
printf("%d %d\n",a,b);
return 0;
}
a=a++和编译器相关,不同环境运行结果不一样
b=a++是确定的,b就是a加1之前的数。但由于第三行的不确定性导致了第5行结果也是不确定的
a=a
a=a+1
b=a
a=a+1
个人认为:开头定义了int类型的a和b,分别使a的值为5,b的值为0,接着执行a=a++代码,a++就是先进行赋值,再进行运算,所以这行代码的意思是先把右边a的值5给左边的a,再对右边的a进行加一运算,接着进行b=a++运算,先把a=5的值给b,接着进行a++运算,所以第二次输出的结果为6和5,因为第一次a的赋值为5,a++就失效了,如果是++a,那值就是先运算再赋值
按照3个步骤走,基本不会错。
a++:
第一步:将a的值拿出来。
第二步:将a的值参与表达式的计算()你的例子就是: a = 5,
第三步:将a的值+1,并赋值给a自己。
建议先用一个c变量来理清逻辑(int c = a++),然后再用a = a++;
使用c辅助变量分析,严格按照三步走。
按照上面的套路:
供参考:
#include <stdio.h>
int main() {
int a = 5, b = 0;
a = a++; // a=a; a++; a=6;
printf("%d\n", a); // 6
b = a++; //b=a; b=6; a++; a=7;
printf("%d %d\n", a, b); //7 6
return 0;
}