【发布时间】:2015-12-17 10:18:01
【问题描述】:
在结构中定义具有 0 个元素的数组是否合法,或者编译器允许它作为副作用?例如:
typedef struct _my_str
{
int len;
double total;
double tax;
int items;
double item_price[0];
} my_struct;
【问题讨论】:
-
我认为它在 C 中是合法的,但它是 C++ 中的扩展
-
@HappyCoder 在上面的例子中,你可以有可变数量的
item_price元素和可变长度结构的数组(通过指针而不是索引处理)。 -
@HappyCoder,主要用例是当您想要一个与少量其他数据密切相关的可变长度数组时,避免将内存管理开销加倍。普通方法将分配结构,包括指向可变长度数组的第二次分配的指针。有效的方法是为结构和数组分配内存。
-
请注意,零大小数组和 C 特性 灵活的数组成员 之间存在差异。在 C 和 C++ 中都禁止使用零大小的数组。