结构体成员数组不定长如何实现

本文探讨了在C++中如何在结构体类中定义一个成员数组,使其长度能在实例化时动态指定。由于常规方法仅分配指针本身长度,导致无法扩展。作者分享了相关验证代码,旨在解决这一问题。
摘要由CSDN通过智能技术生成

【目的】

  定义一个结构体类,其中的成员变量数组长度不定,根据实例化的对象指定长度,所以想到用指针实现

【现状】

  指针可以指向任意长度数组,但结构体类只分配指针本身4字节长度,所以无法扩展

 

 

  1 /**
  2 ***************************************************************************************************
  3 *
  4 *    @FileName        Data structure of device
  5 *
  6 *    @Editor          Skullboyer
  7 *
  8 *    @EditTime        2017-12-27 
  9 *
 10 *    @Version         V0.1
 11 *
 12 *    @Note            
 13 *
 14 ***************************************************************************************************
 15 */
 16 
 17 
 18 /* Define the data structure */
 19 typedef struct
 20 {
 21     uint8_t Msg_Head;         /* 消息标识头 */
 22     uint16_t Msg_ID;          /* 消息 ID */
 23     uint16_t Msg_Prop;        /* 消息体属性 */
 24     uint8_t Term_Phone[6];    /* 终端手机号 */
 25     uint16_t Msg_SwiftNum;    /* 消息流水号 */
 26     void *Message;            /* 消息体 */
 27     uint8_t Msg_CRC;          /* 校验码 */
 28     uint8_t Msg_Tail;         /* 消息标识尾 */
 29 }DATA_s;
 30 
 31 /* Instantiated objects ---------------------------------*/
 32 DATA_s sMedia;
 33 
 34 /* GPS structure */
 35 uint8_t uGPS_Data[28];
 36 DATA_s sGPS = 
 37 {
 38     0x7E;
 39     0x0200;
 40     0x****;
 41     0x**, 0x**, 0x**, 0x**, 0x**, 0x**;
 42     0x****;
 43     uGPS_Data;
 44     0x**;
 45     0x7E;
 46 }
 47 
 48 /* TMPS structure */
 49 uint8_t uTMPS_Data[1024];    /* 最大支持1024个轮胎 10bit */
 50 DATA_s sTMPS = 
 51 {
 52     0x7E;
 53     0x0205;
 54     0x****;
 55     0x**, 0x**, 0x**, 0x**, 0x**, 0x**;
 56     0x****;
 57     uTMPS_Data;
 58     0x**;
 59     0x7E;
 60 }
 61 
 62 /* POSE structure */
 63 uint8_t uPOSE_Data[28];    
 64 DATA_s sPOSE = 
 65 {
 66     0x7E;
 67     0x0206;
 68     0x****;
 69     0x**, 0x**, 0x**, 0x**, 0x**, 0x**;
 70     0x****;
 71     uPOSE_Data;
 72     0x**;
 73     0x7E;
 74 }
 75 
 76 /* OBD structure */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值