C 增量运算符解释
C Increment Operator Explanation
在执行这段C命令时,num的输出是7。我原以为是6,谁能解释为什么结果是7 ?
#include <stdio.h>
int main() {
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0, num = 0;
num = a[++i + a[++i]] + a[++i];
printf("%d ", i);
printf("%d ", num);
return 0;
}
llvm on OS X 给了我 6 和一个警告:
wi.c:5:8: warning: multiple unsequenced modifications to 'i' [-Wunsequenced]
这表明我们正在查看未定义的行为。到目前为止,我还不清楚此处未定义的确切性质,但感觉有点无关紧要。
这个有点tricky,表达式:a[++i+a[++i]]
,涉及变量i
两次自增,结果是a[i + 2 + a[i + 2]]
,也就是[=13] =],第二个操作数 a[++i]
变为 a[3]
,等于 3,因此,最终答案是 7。换句话说,这是未定义的行为。
i
在 num = a[++i + a[++i]] + a[++i];
中的同一表达式中递增 3 次
这在 C 中有未定义的行为。试图解释为什么它输出 7
或 6
或任何东西是一个有争议的问题。 未定义的行为 可以是任何东西。
i = 0;
num = a[ ++i + a[++i]] + a[++i]
将评估为
num = a[1+ a[2]] + a[3]
num = a[1 + 2] + a[3]
num = a[3] + a[3]
num = 3 + 3
num = 6
在执行这段C命令时,num的输出是7。我原以为是6,谁能解释为什么结果是7 ?
#include <stdio.h>
int main() {
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0, num = 0;
num = a[++i + a[++i]] + a[++i];
printf("%d ", i);
printf("%d ", num);
return 0;
}
llvm on OS X 给了我 6 和一个警告:
wi.c:5:8: warning: multiple unsequenced modifications to 'i' [-Wunsequenced]
这表明我们正在查看未定义的行为。到目前为止,我还不清楚此处未定义的确切性质,但感觉有点无关紧要。
这个有点tricky,表达式:a[++i+a[++i]]
,涉及变量i
两次自增,结果是a[i + 2 + a[i + 2]]
,也就是[=13] =],第二个操作数 a[++i]
变为 a[3]
,等于 3,因此,最终答案是 7。换句话说,这是未定义的行为。
i
在 num = a[++i + a[++i]] + a[++i];
这在 C 中有未定义的行为。试图解释为什么它输出 7
或 6
或任何东西是一个有争议的问题。 未定义的行为 可以是任何东西。
i = 0;
num = a[ ++i + a[++i]] + a[++i]
将评估为
num = a[1+ a[2]] + a[3]
num = a[1 + 2] + a[3]
num = a[3] + a[3]
num = 3 + 3
num = 6