我有一个工会声明如下:
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;
是全球性的。
现在我想用数据填充我的联合,因此我想将指针传递给一个函数,如:
rv = switch_mpls_vpws_data_get(lab, &ser_dat_ch->Vpws_dat[lab]);
但是编译器在这里尖叫:表达式必须具有指向对象类型的指针
为什么这样,&ser_dat_ch->Vpws_dat[lab]
不会解析我正在寻找的地址?
答案 0 :(得分:2)
我假设你有一个这样的联合数组和一个指向该内存开头的指针。然后,访问第i个元素的结构成员之一看起来像
ser_dat_ch[i].Vpws_dat
和指向该联合的指针是
&(ser_dat_ch[i])
和指向联合中某个结构的指针(显然是你正在寻找的)是
&(ser_dat_ch[i].Vpws_dat)
答案 1 :(得分:0)
我无法对你的帖子发表评论(声誉不够)。您获得的错误通常暗示函数参数不是指针的正确类型。即将单个维度指针传递给多维指针。
此外,您的语法存在问题:
rv = switch_mpls_vpws_data_get(lab, &ser_dat_ch->Vpws_dat[lab]);
&set_dat_ch->Vpws_dat[lab]
语法混乱。说实话,我甚至不确定先评估Vpws_dat[lab]
然后ser_dat_ch->
再评估&
。你应该简化一下(虽然通过括号你可以得到所需的效果)。传递内部结构ser_dat_ch->Vpws_dat
并检索函数内部的变量,或者在函数执行之前执行以下操作:
int *var = ser_dat_ch->Vpws_dat
然后将var传递给函数。注意:我刚使用了int*
,因为我不确定内部实现是什么。