如何通过引用传递工会成员
How do I pass a member of a union by reference
我有一个联合声明如下:
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]);
但是编译器在这里尖叫:expression must have pointer-to-object type
为什么会这样,&ser_dat_ch->Vpws_dat[lab]
不能解析到我正在寻找的地址吗?
我假设您有一组这样的联合和一个指向该内存开头的指针。然后,访问第 i 个元素的结构成员之一看起来像
ser_dat_ch[i].Vpws_dat
指向该联合的指针是
&(ser_dat_ch[i])
指向联合中结构之一的指针(这显然是您正在寻找的)是
&(ser_dat_ch[i].Vpws_dat)
我无法对您的 post 发表评论(信誉不足)。您得到的错误通常暗示函数参数不是指针的正确类型。 IE。将单维指针传递给多维指针。
此外,您的语法有问题:
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*
因为我不确定内部实现是什么。
我有一个联合声明如下:
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]);
但是编译器在这里尖叫:expression must have pointer-to-object type
为什么会这样,&ser_dat_ch->Vpws_dat[lab]
不能解析到我正在寻找的地址吗?
我假设您有一组这样的联合和一个指向该内存开头的指针。然后,访问第 i 个元素的结构成员之一看起来像
ser_dat_ch[i].Vpws_dat
指向该联合的指针是
&(ser_dat_ch[i])
指向联合中结构之一的指针(这显然是您正在寻找的)是
&(ser_dat_ch[i].Vpws_dat)
我无法对您的 post 发表评论(信誉不足)。您得到的错误通常暗示函数参数不是指针的正确类型。 IE。将单维指针传递给多维指针。
此外,您的语法有问题:
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*
因为我不确定内部实现是什么。