#include<stdio.h>
#include<windows.h>
int main()
{
int i;
int arr[10] = {0};
for (i = 0; i<=12; i++)
{
arr[i]=0;
printf("hehe\n");
}
system("pause");
return 0;
}
上面的程序会一直打印"hehe"
而如果稍作修改,将i的定义和数组的定义交换,则不会一直循环,只输出10个"hehe"
见下代码
#include<stdio.h>
#include<windows.h>
int main()
{
int arr[10] = { 0 };
int i;
for (i = 0; i<=12; i++)
{
arr[i]=0;
printf("hehe\n");
}
system("pause");
return 0;
}
原因:
因为栈的空间使用方式是先从高低地址到低地址,当我们创建i和arr数组变量的时候,i在高地址,arr在的地址,而数组是随着下标的增长地址是由低到高的,这样的话随着下标的增长就有可能让arr[12]与i的地址相同,这时候就可能在循环内部把i更改从而导致了死循环