学习目标:
完成二级指针的调用以及初始化
学习内容:
#include <string.h>
typedef struct function_code_s
{
unsigned int function_id; //功能码
unsigned int reg_num; //寄存器数量
} function_code_t;
typedef struct modbus_rtu_node_s
{
void **funtion_code; //功能码的集合,包括了读写
}modbus_rtu_node_t;
int main(void)
{
modbus_rtu_node_t *rtu_node;
function_code_t *funtion;
rtu_node = (modbus_rtu_node_t *)calloc(1, sizeof(modbus_rtu_node_t));
/* 这一步是关键,先给指针申请一个空间,才能去再申请下面的数据空间 */
rtu_node->funtion_code = (void *)calloc(1, sizeof(void *));
/* 这边初始化3项, */
for(int i =0 ;i<3;i++)
{
/*分配空间*/
rtu_node->funtion_code[i] = (function_code_t *)calloc(1,sizeof(function_code_t));
}
for(int i =0 ;i<3;i++)
{
/* 赋值初始化 */
funtion = (function_code_t *)rtu_node->funtion_code[i];
funtion->function_id = i;
funtion->reg_num = i;
}
printf("function_id %d\n", ((function_code_t *)rtu_node->funtion_code[0])->function_id);
printf("reg_num %d\n", ((function_code_t *)rtu_node->funtion_code[0])->reg_num );
printf("function_id %d\n", ((function_code_t *)rtu_node->funtion_code[1])->function_id);
printf("reg_num %d\n", ((function_code_t *)rtu_node->funtion_code[1])->reg_num );
printf("function_id %d\n", ((function_code_t *)rtu_node->funtion_code[2])->function_id);
printf("reg_num %d\n", ((function_code_t *)rtu_node->funtion_code[2])->reg_num );
free(rtu_node->funtion_code[0]);
free(rtu_node->funtion_code[1]);
free(rtu_node->funtion_code[2]);
free(rtu_node);
}
学习总结:
可能写的不太好,大家见谅。欢迎私信交流。