gpt4 book ai didi

arrays - C 具有可变大小的初始化和未初始化数组

转载 作者:行者123 更新时间:2023-12-03 15:34:12 25 4
gpt4 key购买 nike

我有接下来的两个代码示例:

const char *val = strchr(ch, ' ');
const int diff = (int)(val - ch);

char arr[diff];
const char *val = strchr(ch, ' ');
const int diff = (int)(val - ch);

char arr[diff] = {0};
第二个产生错误,如

error: variable-sized object may not be initialized


这是正确的错误,我明白它为什么会发生。
我想知道为什么第一个代码片段不会产生错误?
更新:
同样关于 sizeof(arr) 在第一个片段中给出了数组的大小,但我认为 sizeof 是一个编译时运算符(?)

最佳答案

在第二种情况下,您试图初始化一个可变长度的数组(因为数组的大小没有用整数常量表达式指定;在变量 diff 的声明中存在限定符 const 不会使它成为一个整数数组声明中的常量表达式)

char arr[diff] = {0};
这对于可变长度数组是不允许的。
来自 C 标准(6.7.9 初始化)

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


您可以通过以下方式将数组的所有元素设置为零
#include <string.h>

//...

char arr[diff];
memset( arr, 0, diff );
至于运营商 sizeof然后对于可变长度数组,它是在运行时计算的。
来自 C 标准(6.5.3.4 sizeof 和 alignof 运算符)

2 The sizeof operator yields the size (in bytes) of its operand, whichmay be an expression or the parenthesized name of a type. The size isdetermined from the type of the operand. The result is an integer.If the type of the operand is a variable length array type, the operand isevaluated; otherwise, the operand is not evaluated andthe result is an integer constant

关于arrays - C 具有可变大小的初始化和未初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66566423/

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