我遇到过这个有趣的片段。我说没有办法可以工作(没有崩溃)。令人震惊的是,它在Linux(使用gcc编译)和OSX(llvm)上都运行“ok”。更令人不安的是,Valgrind没有发现任何错误!
是什么给出了?
int main(void) {
int a[3];
2[a] = 1;
}
答案 0 :(得分:5)
简而言之,编译器会将x[y]
形式的任何内容翻译为*(x + y)
。因此2[a]
转换为*(2 + a)
,与*(a + 2)
中的a[2]
相同。