美文网首页
c语言 关于0长度数组的使用

c语言 关于0长度数组的使用

作者: eversay | 来源:发表于2021-06-10 00:16 被阅读0次
    • 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