在阅读了一些与灵活数组成员相关的帖子后,我仍然不完全理解为什么我们需要这样的功能。
(如果我没有从上面可能的重复问题中解决我的问题,请怪我)
以下两种实现之间的真正区别是什么:
struct h1 {
size_t len;
unsigned char *data;
};
struct h2 {
size_t len;
unsigned char data[];
};
我知道 h2 的大小就好像灵活数组成员(数据)被省略了,即sizeof(h2) == sizeof(size_t)
. 而且我也知道灵活的数组成员只能作为结构体的最后一个元素出现,所以原来的实现可以在data
.
我真正的问题是为什么 C99 添加这个功能?仅仅因为 sizeof(h2) 不包含数据的实际大小?我确信我必须错过这个功能的一些更重要的点。请为我指出。