You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用数组初始化结构体引用?附内存优化场景需求

问题:能否用引用将数组别名化为结构体?

场景与初始尝试

我想实现这样的代码,用引用把一个数组直接别名成结构体,但编译不通过:

struct S {
  int length;
  char data[100];
};

class C {
  uint8_t buffer[10];
  S& s = buffer[0];
};

换成指针的写法是可以编译的,但用引用会更便捷:

class C {
  uint8_t buffer[10];
  S* s = (S*)buffer;
};

这么做的原因是:我有一个类似S的结构体用于收发各类数据包,部分数据包长度有限,直接声明为S会浪费不必要的内存。

补充实际代码场景

之前的表述可能不够清晰,以下是我实际使用的代码片段:

typedef struct BP_Error_t {
    uint8_t cause;
    uint8_t error;
} BP_Error_t;

typedef struct BP_Upload_Rq_t {
    char    file[FILE_NAME_LENGTH];
    uint8_t size;
    uint8_t chunk[MAX_FILE_CHUNK];
} BP_Upload_Rq_t;

typedef struct BusPacket_t {
    uint8_t source;
    uint8_t target;
    uint8_t packet_id;
    uint8_t length;
    union {
        BP_Error_t          error;
        BP_TPI_Poll_t       tpi_poll;
        BP_TPI_ACK_t        tpi_ack;
        BP_WiFi_Poll_t      wifi_poll;
        BP_WiFi_ACK_t       wifi_ack;
        BP_Erase_Rq_t       erase_rq;
        BP_Erase_Rsp_t      erase_rsp;
        BP_Upload_Rq_t      upload_rq;
        BP_Upload_Rsp_t     upload_rsp;
        BP_Download_Rq_t    download_rq;
        BP_Download_Rsp_t   download_rsp;
        BP_DFU_Rq_t         dfu_rq;
        BP_DFU_Rsp_t        dfu_rsp;
    };
} BusPacket_t;

如你所见,BusPacket_t结构体的大小由最长的联合成员决定,达到240字节。现在我需要将仅6字节的错误包作为类成员,若直接声明为BusPacket_t会浪费大量内存,因此想分配6字节数组并将其别名化为结构体以方便访问。

内容的提问来源于stack exchange,提问作者Maple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:22:08