nice公司的一道笔试题讲解
#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("haha\n");
}
return 0;
}
这段代码的运行结果是什么呢?
运行后会进入死循环打印haha,数组明明越界了,为什么不报错呢?是因为它陷进了死循环,停不下来,所以不会报错。
我们进行调试,调试后发现arr[12]恰好就是i,改变arr[12]时也改变i,所以进行了死循环。
原因如图解释所示:
总结:
1.i和arr是局部变量,局部变量是放在栈区上的
2.栈区的使用习惯是:先使用高地址空间,再使用低地址