一个结构体的双指针和一个结构体的数组指针使用例子(都可以)

1 结构体的数组指针

DataFormatStr g_out_data_buf[2];
DataFormatStr g_int_data_buf[20];

typedef struct
{
    UINT32 di;
    UINT32 len;
    UINT8 buf[256];
}DataFormatStr;

/**    
  @brief    电表数据格式转集中器数据格式
  @param    [in] UINT32 orignal_id - 集中器原始命令id
  @param    [in] DataFormatStr *p_in_data - 输入电表数据结构体数组指针
  @param    [in] UINT8 in_num - 输入电表数据个数
  @param    [out] DataFormatStr *out_data_buf - 输出 转化后的集中器数据格式
  @return   返回转化生成的电表数据个数,-1:转化失败
  @warning  
*/
INT32 format_csg645_2_dc(UINT32 orignal_id,DataFormatStr *p_in_data, UINT8 in_num, DataFormatStr *out_data_buf );

 dc_data_num = format_csg645_2_dc(tem_di, g_int_data_buf, meter_di_num, g_out_data_buf);

 if(dc_data_num >0){
     for (i=0;i

  什么 = g_out_data_buf[i].di; 等等

}

2 结构体双指针

/** 参数更新数据描述结构 */
typedef struct
{
    UINT32 di;
    TerminalDataStruct pdata;
}IdTerminalData;

IdTerminalData* pid_data = NULL;
    paratasknum=db_read_parameter(P_ID_RDMETER,Pn,DI,BlockFlag,&pid_data);

 if(paratasknum>0){
     for (i=0;i

  什么 = pid_data[i].di; 等等

}

/**
 * @brief 从/MEDIA/RAM/参数数据库读取参数
 * @param [in] UINT8 task_id 进程id序号,为0-31的数,每个进程占一个号,不能重复
 * @param [in] UINT16 pn  待读取测量点号
 * @param [in] UINT32 di  待读取对象数据标识
 * @param [in] blockFlag 标识DI是否为块,0-标识DI非块;1-DI0为块结构;2-DI1为块结构;3-DI2为块结构;4-DI3为块结构
 * @param [out] IdTerminalData **ppdata 输出读取到的参数,可能是多个参数
 * @return >0:成功,值为参数个数;<0:错误码,错误码见dberrordef.h。
 * @warning 输出的参数为动态分配空间,使用完数据后需要调用db_free_idTerminalData(&ppdata,num)释放ppdata的空间!!!
 */
DBPARAM_INTERFACE_API INT32 db_read_parameter(UINT8 task_id, UINT16 pn, UINT32 di, UINT8 blockFlag, IdTerminalData **ppdata);

你可能感兴趣的:(工作常用,学习新知识)