该代码段如何不会导致SIGSEGV或类似情况

时间:2014-05-12 13:18:54

标签: c

我遇到过这个有趣的片段。我说没有办法可以工作(没有崩溃)。令人震惊的是,它在Linux(使用gcc编译)和OSX(llvm)上都运行“ok”。更令人不安的是,Valgrind没有发现任何错误!

是什么给出了?

int main(void) {
  int a[3];
  2[a] = 1;
}

1 个答案:

答案 0 :(得分:5)

简而言之,编译器会将x[y]形式的任何内容翻译为*(x + y)。因此2[a]转换为*(2 + a),与*(a + 2)中的a[2]相同。