为什么我可以在非数组上应用数组下标访问语法

时间:2010-10-04 06:47:06

标签: c++

  

可能重复:
  In C arrays why is this true? a[5] == 5[a]

考虑以下能够在VC2008下编译的代码。

int i = 0;

int *j = 0;
int k = 0;

i[j];    // OK?!?!
i[k];    // Compile Error.

我想知道,i[j]在这个内容中的含义是什么?

2 个答案:

答案 0 :(得分:4)

i[j]等于j[i]

因此它正在执行*(j + i),这实际上是有效的,因为j是一个指针。

这不适用于k,因为它不是指针。

答案 1 :(得分:2)

这是C / C ++ i [j]形式的一个令人震惊但合法的特征,用于标记偏移相对基址并取消引用它。所以这是合法的。 但我[k] - 不能被解除引用,这就是为什么它是一个错误。

相关问题