Possible Duplicate:
Flexible array members in C - bad?
我阅读了以下代码:
struct hello {
int number;
int data[1];
};
我知道灵活的数组成员允许我们将最后一个元素声明为 array of unspecified size
像这样:
struct hello {
int number;
int data[];
};
在此struct
,最后一个元素没有指定大小,那么这两个有什么区别呢?第一个声明是什么意思?
最佳答案
这种数组:
struct hello {
int number;
int data[];
};
仅作为结构的最后一个元素才有意义,并且仅当您从堆分配结构时才有意义,并且通常使 header 字段包含数组的实际大小:
struct hello *helloptr = malloc(sizeof (struct hello) + count*(sizeof int));
helloptr->number = count;
用途是用一个结构体方便地分配 header 和数据缓冲区。
补充:与您的版本(分配大小为 1 的数组)的区别在于,sizeof struct hello
会更多,因为数组分配有一个元素,而不是 undefined=0。这要么浪费一项的内存,要么使大小计算更加复杂,并且从概念上来说有点“丑陋”(你的代码有大小为 1 的数组,而实际上你的意思是“未定义”,甚至可能是 0)。
在 OOP C++ 中,最好将动态分配的缓冲区包装在类中,这确实是一种“黑客”。
关于c - 这也是 C 语言中的灵活数组结构成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622797/