在执行这段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;
}
答案 0 :(得分:1)
i
在num = a[++i + a[++i]] + a[++i];
这在C中有未定义的行为。试图解释为什么它会输出7
或6
或任何其他内容是一个没有实际意义的点。 未定义的行为可以是任何内容。
答案 1 :(得分:0)
wi.c:5:8: warning: multiple unsequenced modifications to 'i' [-Wunsequenced]
这表明我们正在研究一种未定义的行为。到目前为止,这里未定义的确切性质对我来说并不清楚,但感觉有点无关紧要。
答案 2 :(得分:0)
这有点棘手,表达式为a[++i+a[++i]]
,涉及变量i
的增量两次,并且变为a[i + 2 + a[i + 2]]
,即a[0 + 2 + a[2]] = a[4] = 4
,第二个操作数a[++i]
变为a[3]
,等于3,因此,最终答案为7.换句话说,这是未定义的行为。
答案 3 :(得分:-1)
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