C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫作 柔性数组 。
柔性数组的特点: - 结构体中柔性数组成员前面必须至少有一个其他成员。
- sizeof返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc()函数进行内存的动态分配。
在C99标准环境中,使用柔性数组: typedef struct _protocol_format
{
uint16_t head;
uint8_t id;
uint8_t type;
uint8_t length;
uint8_t value[];
}protocol_format_t;
优于使用指针: typedef struct _protocol_format
{
uint16_t head;
uint8_t id;
uint8_t type;
uint8_t length;
uint8_t *value;
}protocol_format_t;
|