C 错误:声明数组时需要常量表达式,如[n]

C 错误:声明数组时需要常量表达式,如[n],c,arrays,dynamic-arrays,C,Arrays,Dynamic Arrays,这里,常量表达式是必需的,这意味着我们不能先获取n的输入,然后像int a[n]那样声明数组 我的代码是: #include <stdio.h> int main() { int n; scanf("\n Enter the no. of elements of the array. %d", n); int a[n]; for(int i=0; i<n; i++) scanf("\n Enter the elements of

这里,常量表达式是必需的,这意味着我们不能先获取n的输入,然后像int a[n]那样声明数组

我的代码是:

#include <stdio.h>
int main() {
    int n;
    scanf("\n Enter the no. of elements of the array. %d", n);
    int a[n];
    for(int i=0; i<n; i++)
        scanf("\n Enter the elements of the array. %d", &a[i]);
    for(int j=0; j<n; j++)
        printf(" %d", a[j]);
    return 0;
}

请告诉我这是一个动态内存分配。如果是,那么它与新的有什么不同。因为这两个新代码也会在运行时分配内存,这也是。

您的代码不是有效的C90,而是有效的C99


可变长度数组不被视为动态内存分配,因为该术语用于指基于堆的分配器,如malloc。但它们是动态的,因为只能在执行时计算分配的大小。

a[n],在这种情况下,您应该尝试用一些值替换n,例如:-a[100] 希望这能解决你的错误。
祝你好运。

但是,在int A[n]中,大小也是在运行时声明的。那么,我们最后需要说什么,它是否是动态定位的?我在回答中已经说过了。严格地说,它确实是动态分配的,但没有人会将VLA称为动态分配内存。@Alek,严格地说,这取决于您对动态的定义:您一直在关注动态分配。C规范没有使用这个术语。在C中有静态存储持续时间、自动存储持续时间和分配的存储持续时间。在代码中,a和n是自动的。