【发布时间】:2017-12-12 21:30:44
【问题描述】:
我研究了很多静态和动态内存分配,但仍然有一个困惑:
int n, i, j;
printf("Please enter the number of elements you want to enter:\t");
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++)
{
printf("a[%d] : ", i + 1);
scanf("%d", &a[i]);
}
int a[n] 属于静态内存分配还是动态内存分配?
【问题讨论】:
-
你怎么看?您如何定义动态分配?
-
我想可能是动态内存分配。
-
好吧,虽然可以说它是动态的,但是由于分配的内存量是在运行时决定的,所以它不是严格的C意义的动态分配,这是有区别的在静态、自动和动态分配之间。这个属于“自动”。
-
@EugeneSh。 - 为了迂腐,C 区分 存储持续时间 - 静态、自动和分配(相对于 C11 中的线程)。
-
这是个好问题——C中的动态分配几乎总是指
malloc-family的函数和堆分配,但这绝对不是静态分配,所以你感到困惑并不奇怪以及如何分类。所以,是的,这属于第三种类型,“自动分配”。在这种情况下,a是一个可变长度的自动数组。请注意,此数组的实际存储位置取决于实现,C 不处理堆栈和堆。
标签: c memory-management dynamic-memory-allocation static-memory-allocation