【发布时间】:2016-09-28 19:32:13
【问题描述】:
我有一个联合声明如下:
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] 不会解析到我正在寻找的地址吗?
【问题讨论】:
-
什么是
mpls_vpws_t?如果那不是数组 typedef,你显然不能使用Vpws_dat[lab]。也许你的意思是&ser_dat_ch[lab].Vpws_dat -
@M.M 两个结构都是
typedef struct -
说“C 不支持通过引用传递”就像说“C 不支持链表”
-
@M.M Olaf 实际上是对的 - 你可能会说,C 通过传递指针来模拟 PBR。实际上,它是一样的,除非它不是(你不能通过引用传递一个 array,因为它失去了它的数组特征)
-
很好,谢谢。我什至很久以前就知道这一点,但显然决定忘记,因为您通常不会经常使用它。
标签: c pointers structure unions