这是静态内存分配还是动态内存分配的一个例子?

Ash*_*gra 4 c memory-management dynamic-memory-allocation static-memory-allocation

我研究了很多静态和动态内存分配,但仍有一个混乱:

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]);
}
Run Code Online (Sandbox Code Playgroud)

是否int a[n]都在静态或动态内存分配?

Kni*_*nug 13

C标准没有讨论动态分配(或静态分配).但它确实定义了存储持续时间:静态,自动,线程和分配.这决定了一个对象(一块数据)存在多久(可用).

  • 存储持续时间意义上的静态意味着该对象可用于整个程序的执行.文件范围内的变量('全局'变量)和static声明中的局部变量具有静态存储持续时间.

  • 自动存储持续时间是您的常规局部变量,它们仅在它们被声明的块的持续时间内存在(函数,或者例如for循环的花括号内).

  • 分配的存储持续时间是指通过malloc和朋友获得的存储器.它可以从(成功)呼叫中获得malloc,直到相应的呼叫free.这通常被称为动态内存分配,因为它是一种获取具有在运行时确定的大小的内存块的方法.

您的变量a具有自动存储持续时间 但是,它可以被认为是动态的,因为它的长度是在运行时确定的,而不是在编译时确定的.就像分配的存储持续时间一样.