首页 > 解决方案 > 如何在循环中声明分配的数组?

问题描述

我对这个功能感到困惑。

int i;
for(i = 1; i<10; i++){
        int arr[i];
        printf("%d\n",sizeof(arr));
    }

return 0;

空间如何在有界(由 ESP)堆栈内存中增长?有没有一种编译技巧?

编辑解释:堆栈不应该是这样的吗?

0  ---> val of i uninitialized
-4 ---> arr[0] uninitialized

在第一个循环之后

0  ---> val of i uninitialized
-4 ---> arr[1] uninitialized
-8 ---> arr[0] uninitialized

我很想说:ESP 是否在循环的每次迭代下方移动?

标签: carraysstackstatic-allocation

解决方案


空间如何在有限大小的堆栈内存中增长?

你指的是空间char arr——它的空间不会增长。for它是循环范围内的局部变量。所以每次循环有一个新i的它都是一个全新的char arr.


推荐阅读