2016-04-07 20 views
0

構造体Aとその構造体のインスタンスへのポインタの配列を持っています
配列からメンバーに直接アクセスしようとしていますが、それを行うには正しい構文:構造体へのポインタのC配列

struct A 
{ 
    int a; 
    void** b; 
} 

A* p = (A*) malloc(sizeof(A)); 
p->b = (A**) malloc(sizeof(A*) * 3); 

// 
// something is done 
// 

int c; 

A* test = p->b[0]; 
c = test->a; 

基本的に私が求めているものを、私は1行でcの値を割り当てることができますので、私は中間の*テストを取り除くどうやっているのですか?

+1

なぜ 'void **'で、 'struct A **'でないのですか? – alk

+0

それは無事です。 私は何をしているのか、ここには表示されていないのは空白が必要です。 問題は2つの最後の行にあります。 – user3548298

+0

'p-> b =(A **)malloc(sizeof(A *)* 3);'が整形されていないと、コンパイラは文句を言います –

答えて

2

ただ、これはあなたが行うことができます

int c = p->b[0]->a; 
+0

それはうまくいく!結局のところ、ボイドはまったく関連性がありましたか? – user3548298

+0

@ user3548298:だから私は尋ねた。 ;-) – alk

-1

を行うだろう

struct A 
{ 
    int a; 
    struct A ** b; 
} 

の定義

int c = ((struct A*) (p->b[0]))->a; 

の操作を行います。

c = ((A*) (p->b[0]))->a; 
+0

'A'はCの型ではないので、できません。 – alk

関連する問題