gpt4 book ai didi

c - 变长数组是否以 C 中的默认 0 值开头?

转载 作者:行者123 更新时间:2023-12-04 10:33:23 26 4
gpt4 key购买 nike

我知道我cannot initialize variable-length arrays在 C 中具有明确提供的值。以下代码是不是 支持的:

void main() {
int l = 2;
float test[l] = {1.0, 2.0}; // my compiler says: "Variable-sized object may not be initialized"
}

我的问题是:如果我不尝试给出任何值:
void main() {
int l = 2;
float test[l];
}

... C 编译器会确保它默认开始初始化为零吗?

最佳答案

变长数组默认不初始化,也不能显式初始化,除了内存分配例程,如 calloc可以初始化空间。

C 2018 6.7.6.2(“数组声明符”)2 说:

… If an identifier is declared to be an object with static or thread storage duration, it shall not have a variable length array type.



因此,可变长度数组的存储持续时间必须是其他存储持续时间之一:自动或分配 [6.2.4 1]。 (有一个临时存储期,但仅适用于结构或 union [6.2.4 7]。)

6.7.9 10 说默认情况下不初始化具有自动存储持续时间的对象:

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate…



此外,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.

关于c - 变长数组是否以 C 中的默认 0 值开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60306937/

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