【发布时间】:2021-02-16 10:31:59
【问题描述】:
我在结构定义here 的索引中看到了一个未提及大小的数组。 然后我尝试对示例代码重复相同的操作
struct some {
char a[];
};
它会抛出一个错误:flexible array member in otherwise empty struct。
所以我尝试添加另一个成员
struct some {
unsigned int x;
char a[];
};
并且编译成功;我所做的观察是sizeof(struct some) = sizeof(unsigned int)。这意味着,a 在内存中没有任何份额。
- 什么是 C 中的灵活数组?
- 在没有分配内存的情况下,这样的数组有什么用?
- 它是 C 标准还是 GNU 的选项?
而且,在初始化数组时最后使用逗号, 有什么用处?
struct other array[] = {
{....},
{....},
};
【问题讨论】:
-
不要在一篇文章中问无关的问题。
-
它们对于动态分配的内存很有用,例如
struct some *foo = malloc(offsetof(struct some, a[100]));将为struct some分配一块内存,用于存储灵活数组成员a的100 个元素。
标签: arrays c struct linux-kernel