c语言 关于0长度数组的使用
作者:
eversay | 来源:发表于
2021-06-10 00:16 被阅读0次
typedef struct
{
uint8_t head;//固定字符
uint8_t cmd;//命令
uint8_t args;//参数
uint8_t size[2];//data数据大小
uint8_t data[0];
//uint8_t crc[2]; //补在data后两个字节
} pack_t,*ppack_t;
//定义一个数据包的结构体指针
pack_t *pack;
- 思路
这是一个简单的通讯包的结构体的设计,head 为固定字符,用于快速判断通讯数据协议是否是满足要求的,cmd 和 args 做协议数据类型识别,size 是这个包中data 数据的长度,data[0] 是一个0长度的数组,实际上在计算这个结构体大小的时候 data 这个字段是没有算进去的,所以这个结构的大小应该是5个字节的大小,0长度数组的使用方式是 将一组有n个字节大小的数组的起始地址指针array,强制转换为上面这个结构体指针,从而得到的((*pack_t)array)->data 这个地址就是通讯数据包中待使用的有效数据data的起始地址。这个有效数据data在内存上是紧跟在size这个字段后面的,使用data[0]只是方便操作。
本文标题:c语言 关于0长度数组的使用
本文链接:https://www.haomeiwen.com/subject/sxwcoctx.html
网友评论