我有一个 union 声明如下:
typedef union {
mpls_vpls_t Vpls_dat; //typedef struct
mpls_vpws_t Vpws_dat; //typedef struct
}ser_cache_t;
然后我为它分配内存:
ser_dat_ch = calloc(LABEL_T_CNT,sizeof(ser_cache_t));
if (ser_dat_ch == NULL)
return ERROR;
而 static ser_cache_t *ser_dat_ch = NULL;
是全局的。
现在我想用数据填充我的 union ,因此我想将指向它的指针传递给函数,例如:
rv = switch_mpls_vpws_data_get(lab, &ser_dat_ch->Vpws_dat[lab]);
但是这里编译器尖叫:expression must have pointer-to-object type
为什么会这样,&ser_dat_ch->Vpws_dat[lab]
不会解析到我正在寻找的地址吗?
最佳答案
我假设您有一组这样的 union 和一个指向该内存开头的指针。然后,访问第 i 个元素的结构成员之一看起来像
ser_dat_ch[i].Vpws_dat
指向那个 union 的指针是
&(ser_dat_ch[i])
指向 union 中结构之一的指针(这显然是您正在寻找的)是
&(ser_dat_ch[i].Vpws_dat)
关于c - 如何通过引用传递 union 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756144/