[技术讨论] 定义了一个函数,又将返回值传递给结构体

[复制链接]
1539|7
地瓜patch 发表于 2025-9-12 17:08 | 显示全部楼层 |阅读模式

结构体声明

typedef struct
{
        char data1;
        char * data;
        uint8_t data_len;
        bool crc_flag;
}modbus_command_struct;


结构体定义
modbus_command_struct * modbus_set_speed_command;

函数定义

modbus_command_struct * modbus_command_init(char * modbus_command_data,uint8_t modbus_command_data_len)
{
        uint16_t crc;
        ..................
}


将函数返回值赋值给结构体
modbus_set_speed_command = modbus_command_init(modbus_set_speed_data,sizeof(modbus_set_speed_data)/sizeof(modbus_set_speed_data[0]));




那么, modbus_command_init()的返回值,给了结构体中的哪个元素?
LcwSwust 发表于 2025-9-12 17:17 | 显示全部楼层
指针了解一下,"modbus_command_struct *"替换成"char *" 看看能不能看懂.
qinlu123 发表于 2025-9-13 08:24 | 显示全部楼层
既然函数的返回值是个结构体指针,那么函数要return一个结构体指针出去,看函数里到底是怎么return的。其实代码不如写成这种形式void  modbus_command_init(modbus_command_struct * MCS,char * modbus_command_data,uint8_t modbus_command_data_len)
lansebuluo 发表于 2025-9-13 08:30 | 显示全部楼层
返回结构体指针,指针指向的存储空间,不能是函数内动态分配的变量,否则函数返回后,变量也会消失
 楼主| 地瓜patch 发表于 2025-9-14 18:09 | 显示全部楼层
qinlu123 发表于 2025-9-13 08:24
既然函数的返回值是个结构体指针,那么函数要return一个结构体指针出去,看函数里到底是怎么return的。其实 ...

返回值有两种,正确时,返回结构体  .  错误时,返回0。返回0时是将结构体所有元素置零么?
 楼主| 地瓜patch 发表于 2025-9-14 18:10 | 显示全部楼层
lansebuluo 发表于 2025-9-13 08:30
返回结构体指针,指针指向的存储空间,不能是函数内动态分配的变量,否则函数返回后,变量也会消失 ...

用全局变量传递参数
qinlu123 发表于 2025-9-15 08:05 | 显示全部楼层
地瓜patch 发表于 2025-9-14 18:09
返回值有两种,正确时,返回结构体  .  错误时,返回0。返回0时是将结构体所有元素置零么? ...

不知道
elife 发表于 2025-9-15 17:50 | 显示全部楼层
地瓜patch 发表于 2025-9-14 18:09
返回值有两种,正确时,返回结构体  .  错误时,返回0。返回0时是将结构体所有元素置零么? ...

无论正确,错误,返回都是由你的函数处理的,有函数行为决定。显然错误返回0(如果按指针也是NULL,空指针),没有结构变量了,所以也没有结构变量元素清不清零的问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1929

主题

15216

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部