这是我在接受采访时遇到的一个问题,有人会告诉我这个“简单”代码背后的“真相”吗?
#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;
}
答案 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。