我们来看这样一个题目:
请问这段代码的可能会出现什么问题?并解释原因
#include <stdio.h>
int main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hello\n");
}
return 0;
}
结果我们发现死循环打印hello,但是为什么会导致这样的结果呢?
for循环中,i的内容是从0,一直增加到12,而数组只有10个空间,因此会越界
每次访问arr数组i号位置时,都会将该位置内容设置为0,当访问到arr[12]时,也会将该位置内容设置为0,而位置恰好为i的位置,即a[12]恰巧将i设置为0,因此造成死循环。
改正方法:使用数组时避免越界。
注意:不同平台的变量i的创建位置可能不同