int a = 1; printf("%d %d %d\n",a,a++,++a); 输出的结果是什么?为什么?

如题所述

未定义行为,结果不可预测且无意义,这种代码是错误的。追问

请问哪里未定义?

请问哪里未定义?

追答

在两个顺序点之间多次修改同一个对象的值,或者同时访问并修改同一个对象的值,属于未定义行为。如果你不明白未定义行为是什么,先百度了解。

追问

请问你用手打出代码试过吗,而不是经过大脑就说代码错误。还有你凭什么认定是同时访问并修改同一个对象,要知道++也是一种运算符,而这里面也有运算优先级之分。我想要的答案其实是后面的为什么输出结果是那样,你懂吗?完整代码给你贴上:
#include
int main() {
int a = 1;

printf("%d %d %d\n",a,a++,++a);

return 0;

}

追答

我不想和你争论,请你自己阅读C99标准,先了解顺序点、副作用两个概念分别是什么意思。
还有,有结果不代表这种语句就正确、可移植。

追问

字数超限,放图

顺便看看那两个回答

追答

你看,所以你连我在说什么都不知道,说明你没到这个境界。我让你去了解顺序点和副作用是有意义的,因为它们直接告诉你为什么这样的语句是没有标准计算过程的,怎么算都对,怎么算又都不对。你跟我扯什么数据结构编译原理,那都是完全偏离主题,不能从根本上解答这个问题。你找的那几个回答都是完全错误的,什么"printf在编译的时候表达式是从左往右计算"这种句子根本是不知所云,C语言标准根本没有规定函数参数的求值顺序。

初学者就要虚心一点,不要吊儿郎当一副我什么都懂的样子,我在这里回答问题是有底气的,我要是一知半解根本就不会出现在这个问题下面。

温馨提示:答案为网友推荐,仅供参考
相似回答