0

可能重复:
任何人都可以解释这些未定义的行为(i = i++ + ++i,i = i++ 等......)
未定义的行为和序列点

#include<stdio.h>
int main(){
int i=5,j=5,y,x;
int m=++i;
int n=++i;
x=m+n;
y=++j + ++j ;
printf("%d  %d ",x,y);
return 0;
}

输出:13 14 谁能解释一下为什么'y'值是14而不是13。

4

1 回答 1

2

大多数编译器会在执行加法并将值归因于 y 之前将 j 递增两次,这就是您的情况下结果为 14 的原因。

但是,C 标准没有指定该表达式的求值顺序,因此在另一个编译器上,结果确实可能是 13。

换句话说,这是未定义的行为,不应在混淆竞赛和谜题中使用。

于 2012-11-17T18:52:09.337 回答