2016-09-28 7 views
0

によって労働組合のメンバーを渡すん:は、どのように私は労働組合は次のように宣言した参照

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;がグローバルです。

今、私はデータと私の労働組合を移入したいので、私は次のように機能し、それへのポインタを渡しwantto:
rv = switch_mpls_vpws_data_get(lab, &ser_dat_ch->Vpws_dat[lab]);
しかし、ここでは、コンパイラは悲鳴:式はポインタとオブジェクトタイプ ている必要がありますなぜですか、&ser_dat_ch->Vpws_dat[lab]私は探しているアドレスに解決しないでしょうか?

+3

'mpls_vpws_t'とは何ですか?これが配列typedefでない場合、明らかに 'Vpws_dat [lab]'は使用できません。おそらく '&ser_dat_ch [lab] .Vpws_dat' –

+0

@ M.Mの両方の構造体は' typedef struct'です – cerr

+0

できません。 Cは参照渡しをサポートしていません。しかし、あなたはユニオン(別名アドレス)にポインタを渡すことができます。 [ask]を参照し、[mcve]を提供してください。また、オペレータの前提についても読んでみたいです。 – Olaf

答えて

2

あなたはそのような共用体の配列とそのメモリの先頭へのポインタを持っていると仮定します。その後、それは明らかに何をされ(i番目の要素の構造体メンバのアクセス1は

ser_dat_ch[i].Vpws_dat 

ようになり、その共用体へのポインタは

&(ser_dat_ch[i]) 

と組合における構造体の一つへのポインタでありますあなたが探している)は

&(ser_dat_ch[i].Vpws_dat) 
+0

目を覚ましてくれてありがとう! – cerr

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*を使用したのは、内部実装の内容が不明なためです。

関連する問題