【发布时间】:2020-01-12 20:40:39
【问题描述】:
#include <stdio.h>
int main(){
int a[1] = {1};
int b = 6;
printf("%d\n", a[-1]);
printf("%d\n", b);
//printf("%d\n", (a-1 == &b));
return 0;
}
我写了上面的代码,发现在使用gcc或mingw编译时它不能正常工作,但是当我取消第8行的注释时,一切都很好。谁能帮我解释一下代码?
【问题讨论】:
-
当你没有第8行时,编译器不需要变量
b,所以它消除了它。当你有第 8 行时,它需要b。使用负索引是未定义的行为——当你使用它时,任何事情都可能发生。