gpt4 book ai didi

c - 为什么我不能像这样初始化数组?

转载 作者:行者123 更新时间:2023-12-01 18:47:19 29 4
gpt4 key购买 nike

#include<stdio.h>

main() {
int a=5;
int array[a]={0};
printf("Success\n");
}

当我执行程序时,它会出现错误

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 编译器中。但我可以这样分配

 int array[5]={0};

有人纠正我吗?

最佳答案

本声明

int array[a]={0};

声明一个可变长度数组 (VLA)。

根据C标准(6.7.9初始化)

3 The type of the entity to be initialized shall be an array of unknown size or a complete object type that is not a variable length array type.

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

考虑一个例子

void f( size_t n )
{
int a[n] = { 1, 2, 3, 4, 5 };
//...
}

这里a是一个变长数组。现在,由于 n 可以具有任何值,因此数组定义中的初始值设定项的数量可以大于数组的大小。所以这段代码从另一个方面打破了标准,因为初始化器的数量不能大于数组元素的数量。另一方面,如果初始化器的数量小于数组元素的数量那么在这种情况下该怎么办?也许程序员的意思并不是某些元素应该被零初始化。

至于这个声明

int array[5]={0};

那么就没有变长数组了。数组的大小在编译时已知。所以没有问题

.

关于c - 为什么我不能像这样初始化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27417226/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com