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。换句话说,这是未定义的行为。

inum = a[++i + a[++i]] + a[++i];

中的同一表达式中递增 3 次

这在 C 中有未定义的行为。试图解释为什么它输出 76 或任何东西是一个有争议的问题。 未定义的行为 可以是任何东西。

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