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

如何通过传引用获取数组元素?C语言代码问题求解

问题分析与修正

你的代码存在几个关键错误,导致无法正确获取数组地址:

  1. 关键字拼写错误:typdef 应为 typedef
  2. 变量重名冲突:函数 get_msg_data 的参数 data 与全局静态变量 data 同名,函数内操作的是局部参数而非全局变量
  3. 参数类型不匹配:main 中传递的 &data 是 uint8_t** 类型,但函数定义的参数是 const uint8_t*,类型不兼容
  4. 数组地址使用错误:&msg_t.msg_data 是指向整个数组的指针(类型为 uint8_t (*)[64]),而非指向数组首元素的指针,直接赋值给 uint8_t* 会导致类型不匹配

正确实现方式

方式一:通过指针的指针传递地址(保留全局变量)

typedef struct {
    msg_hdr hdr;
    uint8_t msg_data[64];
} msg;

msg msg_t;
static uint8_t *data;

// 用指针的指针作为参数,修改外部指针的指向
void get_msg_data(uint8_t **out_data) {
    // 数组名本身就是首元素的地址,无需取地址
    *out_data = msg_t.msg_data;
}

int main() {
    // 传入全局指针的地址,让函数修改其指向
    get_msg_data(&data);
    // 现在可通过data访问数组元素,例如data[0]、data[1]...
}

方式二:让函数直接返回数组指针(无需全局变量)

typedef struct {
    msg_hdr hdr;
    uint8_t msg_data[64];
} msg;

msg msg_t;

// 直接返回数组首元素的指针
uint8_t* get_msg_data(void) {
    return msg_t.msg_data;
}

int main() {
    uint8_t *data = get_msg_data();
    // 访问数组元素,例如data[0]、data[1]...
}

额外注意:确保在调用 get_msg_data 之前,协议接收函数已经完成对 msg_t.msg_data 的填充操作,否则读取到的可能是初始值(比如全0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:02:49