#include<stdio.h>
main()
{
int i=5;
printf("%d%d%d",i,i++,++i);
}
我的预期输出是556。 但是当我执行它时,结果是767。 如何?
答案 0 :(得分:1)
您无法确定增量是否按预期顺序执行,因为参数内的指令是按编译器选择的顺序执行的。
答案 1 :(得分:1)
您正在访问和更改sequence point内的值(更改它两次,实际上),在序列点内您无法确定操作的顺序。
即。当您从左到右读取函数调用时,无法保证表达式按该顺序计算。可以首先评估第一个i
,得到5.可以首先评估i ++,在评估++i
和i
之前递增到6,依此类推。
答案 2 :(得分:0)
有趣的是,问题是你不止一次使用同一个变量。如果您将代码更改为:
int i, j, k;
i=j=k=5;
printf("%i%i%i",i,j++,++k);
它按预期工作。我认为,当你使用相同的变量时,操作的顺序会搞砸。
答案 3 :(得分:-1)
$ gcc -Wall arst.c
arst.c:2:1: warning: return type defaults to ‘int’
arst.c: In function ‘main’:
arst.c:5:27: warning: operation on ‘i’ may be undefined
arst.c:5:27: warning: operation on ‘i’ may be undefined
arst.c:6:1: warning: control reaches end of non-void function
就是这样。