您可以定义some_type
为联合:
typedef union{
struct structA_t;
struct structB_t;
struct structC_t;
}some_type;
这将导致您不知道数组中哪个元素实际包含什么的问题。
为了克服这个问题,添加另一个字段来指定使用的内容:
/* numbers to identify the type of the valid some_type element */
typedef enum my_e_dataId{
dataid_invalid = 0,
dataid_a,
dataid_b,
dataid_c
} my_dataId;
typedef union u_data {
struct structA_t* a;
struct structB_t* b;
struct structC_t* c;
}mydata;
typedef struct s_some_type{
my_dataId dataId;
mydata myData;
}some_type;
然后你可以按如下方式初始化你的数组:
some_type sta[] = {
{dataid_a, (struct structA_t*) &a},
{dataid_b, (struct structA_t*) &b},
{dataid_c, (struct structA_t*) &c}
};
当您遍历 的元素时array
,首先评估dataId
,以便您知道myData
. 然后,例如,使用访问第一个元素的数据
sta[0].myData.a->FIELDNAME_OF_A_TO_ACCESS
或第三个元素
sta[2].myData.c->FIELDNAME_OF_C_TO_ACCESS
有关工作示例,请参阅此 ideone:http: //ideone.com/fcjuR