下面是代码
#include <stdio.h>
int main(void)
{
int a = 22;
int i = 0;
a = a++;
i = ++i;
printf("%d %d",a,i);
return 0;
}
运行结果是22 1
我只想知道为什么a还是22不是应该a先赋值后自加1,然后输出不是应该是23吗?求解
下面是代码
#include <stdio.h>
int main(void)
{
int a = 22;
int i = 0;
a = a++;
i = ++i;
printf("%d %d",a,i);
return 0;
}
运行结果是22 1
我只想知道为什么a还是22不是应该a先赋值后自加1,然后输出不是应该是23吗?求解
a = a++;
i = ++i;
这种叫做副作用表达式。
也就是说,对于a = a++,a++这个表达式改变了a的值,同时表达式又求值给了a,这里的a++的a,究竟是赋值之前的a还是之后的a,是存在不同的理解的。
而这个没有在C语言的规范中列出来,各个编译器的实现不同,结果就不同。
i也是类似的问题。所以结果是22或者23,都有可能
这种叫做“未定义行为”。
扩展阅读:https://www.guokr.com/blog/471312/