C++中灵活数组结构使用

作者:分开不是尽头 | 创建时间: 2023-04-23
C99中结构中的最后一个元素是未知大小的数组称为灵活数据结构成员,但是结构中的灵活数组成员前面必须至少有一个其它成员.灵活数组成员也许结构中包含一个可变大小的数组.这种结构的sizeof返回大小不包含灵活数组的内存.包含灵活数组成员的结构使...
C++中灵活数组结构使用

操作方法

1)方法1 struct header { size_t len; unsigned char data[1]; }; ptr = malloc(sizeof(struct header) + (n -1)); 但这种方法是否有效是有赖于实现的,这破坏了可移植性的规则.

2)方法2 struct header*my_header = malloc(offsetof(struct header, data) + n * sizeof(my_header->data)); 或者使用宏来简化代码: #define FLEXIBLE_SIZE SIZE_MAX // or whatever maximum length for an array #defineSIZEOF_FLEXIBLE(type, member, length) \ (offsetof(type,member) + (length) * sizeof((type*)0)->member[0]) 这种方法过于复杂,而且为了保持C89兼容,看起来没有什么特别的好处,你不需要一个完全的C99编译器就可以使用弹性数组成员.

3)方法3 使用指针,不要节约那一次间接引用,如果可移植性那么重要的话.

点击展开全文

更多推荐