#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 2;
printf("%d %d\n", ++i, ++i);
i = 2;
printf("%d %d\n", i++, i++);
return 0;
}
输出:
4 4
3 2
我知道参数在printf()中从右向左传递。但如果我在第二行获得3 2,为什么我不能在第一行获得4 3?
答案 0 :(得分:7)
答案 1 :(得分:1)
您编写的代码属于编程语言的未定义行为。因为每个平台上的语言解析器可能是不同的。一些解析器从左到右读取,反之亦然。请参阅wiki link完整的信息
答案 2 :(得分:0)
你可以用堆栈的例子来考虑这种情况,即FILO。
在第二个printf语句printf("%d %d\n", ++i, ++i);
两个++我将从左到右依次进入堆栈。因为它的后增量,所以去的值将是2和2但是在出来时第一个值将是2而第二个值将是3.