如何通过传引用获取数组元素?C语言代码问题求解
问题分析与修正
你的代码存在几个关键错误,导致无法正确获取数组地址:
- 关键字拼写错误:
typdef应为typedef - 变量重名冲突:函数
get_msg_data的参数data与全局静态变量data同名,函数内操作的是局部参数而非全局变量 - 参数类型不匹配:
main中传递的&data是uint8_t**类型,但函数定义的参数是const uint8_t*,类型不兼容 - 数组地址使用错误:
&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
相关产品推荐
相关产品推荐

