nice公司的一道笔试题讲解

nice公司的一道笔试题讲解

#include 
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;
}

这段代码的运行结果是什么呢?

nice公司的一道笔试题讲解_第1张图片

运行后会进入死循环打印haha,数组明明越界了,为什么不报错呢?是因为它陷进了死循环,停不下来,所以不会报错。

nice公司的一道笔试题讲解_第2张图片

我们进行调试,调试后发现arr[12]恰好就是i,改变arr[12]时也改变i,所以进行了死循环。

原因如图解释所示:

nice公司的一道笔试题讲解_第3张图片

总结:

1.i和arr是局部变量,局部变量是放在栈区上的
2.栈区的使用习惯是:先使用高地址空间,再使用低地址

你可能感兴趣的:(C语言)