为什么这个代码outOfBound?

时间:2016-09-29 15:21:16

标签: c arrays

这是我在接受采访时遇到的一个问题,有人会告诉我这个“简单”代码背后的“真相”吗?

#include<stdio.h>
int main()
{
    int a[]={1,2,3};
    for(int i=0; i<=3; i++){
        a[i]=0;
        printf("%d\n", i);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果&lt; =被&lt; =替换,那么一切都会正确的。因为它导致数组超出绑定索引错误并将打印值 0 1 2 3 虽然数组内容的值每次都是0

答案 1 :(得分:0)

循环变量i取值0,1,2和3.不幸的是,3是数组a的越界索引,其长度仅为3(合法索引) 0,1和2)。为了避免越界数组访问,循环控制应该是

for(int i=0; i<3; i++){

请注意使用<代替<=。作为一个面试问题,目标是测试你是否注意到这种非常常见的off-by-one error