C 为什么可以';我不能像这样初始化数组吗?

C 为什么可以';我不能像这样初始化数组吗?,c,arrays,C,Arrays,在cc编译器中。但我可以这样分配 b.c: In function ‘main’: b.c:8:1: error: variable-sized object may not be initialized b.c:8:1: warning: excess elements in array initializer [enabled by default] b.c:8:1: warning: (near initialization for ‘array’) [enabled by default

在cc编译器中。但我可以这样分配

b.c: In function ‘main’:
b.c:8:1: error: variable-sized object may not be initialized
b.c:8:1: warning: excess elements in array initializer [enabled by default]
b.c:8:1: warning: (near initialization for ‘array’) [enabled by default]
如果有人纠正我

“ISO C99允许可变长度自动数组,并且作为 扩展GCC在C90模式和C++中接受它们。”

编译器在某些情况下可能会有所不同。使用可变大小的数组时出现问题是正常的。如果你真的需要这样做的话,这应该是可行的

 int array[5]={0};
#包括
#定义一个5
main()
{
int数组[A]={0};
printf(“成功”\n);
}

方括号[]内的elements字段表示数组中的元素数,必须是一个常量表达式,因为数组是静态内存块,其大小必须在程序运行之前在编译时确定。

此语句

#include<stdio.h>
#DEFINE A 5

 main()
 {
 int array[A]={0};
 printf("Success\n");
 }
声明可变长度数组(VLA)

根据C标准(6.7.9初始化)

3待初始化实体的类型应为 未知大小或长度不可变的完整对象类型 数组类型

问题是编译器在编译时应该知道数组大小,以便生成初始化数组的代码

举个例子

int array[a]={0};
这是一个可变长度数组。既然n可以有任何值,那么数组定义中的初始值设定项的数量就可以大于数组的大小。因此,这段代码从另一方面违反了标准,因为初始值设定项的数量可能不大于数组元素的数量。另一方面,如果初始值设定项的数量小于数组元素的数量,那么在这种情况下该怎么办?也许程序员并不意味着某些元素应该初始化为零

至于这个声明,

void f( size_t n )
{
    int a[n] = { 1, 2, 3, 4, 5 };
    //...
}
那么就没有可变长度数组了。数组的大小在编译时已知。所以没有问题


program@Bhuvanesh您是否使用cc-E检查了代码。此变量中没有要放入数组大小的值。这与写入int a[5]={0}相同因为预处理器将在编译时自行解决。如果确实需要的话,这应该可以工作this@AkileshJaiswal-但两者都是局部变量。这将在运行时起作用,因为数组是静态内存块,其大小必须在程序运行之前在编译时确定。:)这是一个VLA,因此数组大小不必是常量表达式。但我们可以将数组声明为数组[a];,但问题是,当我们初始化时,只有错误才会出现occur@Bhuvanesh:Vlad提到的引文明确指出,无法初始化可变长度数组。作为唯一回答实际问题的人,做得很好。@Bhuvanesh查看我更新的帖子。@cornstales我更新了我的帖子,因为一开始我没有解释为什么做不到。
void f( size_t n )
{
    int a[n] = { 1, 2, 3, 4, 5 };
    //...
}
int array[5]={0};