<分区>
我在我工作的项目中看到了下一个代码:
struct Str
{
size_t count;
T data[1];
};
Str* str = (Str*)malloc(sizeof(Str) + sizeof(T) * count);
str->count = count
...
str->data
被用作一个数组,其中包含 T
的 count
个元素。
为什么要声明 T data[1]
而不是 T* data
?这样做有什么好处吗?
标签 c++
<分区>
我在我工作的项目中看到了下一个代码:
struct Str
{
size_t count;
T data[1];
};
Str* str = (Str*)malloc(sizeof(Str) + sizeof(T) * count);
str->count = count
...
str->data
被用作一个数组,其中包含 T
的 count
个元素。
为什么要声明 T data[1]
而不是 T* data
?这样做有什么好处吗?
最佳答案
您的代码不是有效的 C++。
但是,它在某种程度上是有效的 C。在 C 中编写它的标准方法是将最终成员声明为 T data[];
(“灵活长度数组”),目的是允许您分配一个动态 block 内存并将固定 header 和可变长度数组一起存储在其中。
使用这种类型有几个限制(例如,它不能是自动变量或数组元素的类型)。参见示例 the GCC implementation ,它提供了几个非标准扩展。
关于c++ - 结构中的最后一个成员类型为 T[1] 而不是 T*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213763/