C语言a=a++的运算顺序是怎么样的?

为什么下面代码输出不同?
#include <stdio.h>

int main()
{
int a=1;
a=a++;
printf("%d",a);
return 0;
}

#include <stdio.h>

int main()
{
int a=1,b;
b=a++;
printf("%d",b);
return 0;
}

这两个程序的输出结果是相同的:


因为它们的操作都是:先取变量a的值,取完后a自增,最后取前面取到的值赋值给赋值号左边的变量(所以最后输出变量的值就都是1)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-07-14

a=a++;

这是一个未定义行为,++的副作用自增1的发生时间是不定的,可能在赋值副作用前,也可能在赋值副作用后

本回答被网友采纳
第2个回答  2021-07-14
C语言
前++,与后++有区别
a++;//先取值,a后+1
++a;//a先+1,后取值
例如:
int a=2;
b=a++;//先赋值给b,a再自加1
b的值为2;
b=++a;//先a自加1,再赋值给b
b的值为3
(1)
int a=1;
a=a++;
/*可以拆分成两句
a=a;//a==1
a++;//++后,a==2
*/
输出a:2
(2)
int a=1;
b=a++;
/*可以拆分成两句
b=a;//b==1
a++;//a==2
*/
输出b:1
相似回答