考虑以下能够在VC2008下编译的代码。
int i = 0;
int *j = 0;
int k = 0;
i[j]; // OK?!?!
i[k]; // Compile Error.
我想知道,i[j]
在这个内容中的含义是什么?
答案 0 :(得分:4)
i[j]
等于j[i]
因此它正在执行*(j + i)
,这实际上是有效的,因为j
是一个指针。
这不适用于k
,因为它不是指针。
答案 1 :(得分:2)
这是C / C ++ i [j]形式的一个令人震惊但合法的特征,用于标记偏移相对基址并取消引用它。所以这是合法的。 但我[k] - 不能被解除引用,这就是为什么它是一个错误。