我有一个c代码。 我给出了一个数组索引为12.但是它允许我将数组初始化为该索引,而不是为索引输出错误。 任何人都可以向我解释它是否正在发生。
int vas1[12][12];
vas1[15][15]=0;
int i,j;
for (i = 0; i < 15; i ++)
{
for (j = 0; j < 15; j ++) {
printf("i=%d j=%d vas=%d",i,j,vas1[i][j]);
}
}
printf("Success");
由于
答案 0 :(得分:5)
C不会对数组访问进行边界检查。它只是将非法访问标记为“未定义的行为”,因此每个实现都可以随心所欲。由于使用C意味着您知道自己在做什么,因此C允许您shoot yourself in the foot。
在实践中,有时你会得到一个错误,有时候不会。有时你不会得到错误,但客户会。最糟糕的情况:你不会得到一个错误,但是程序的行为真的很奇怪(变量无缘无故地改变了值等)。