2016-04-07 27 views
0

Bir struct A ve bu yapının örneklerine gösterici dizisi var
Diziden doğrudan bir üyeye erişmeye çalışıyorum ama ne olduğunu bilmiyorum doğru sözdizimi bunu yapmak için:C - Yapılandırma için işaretçi dizisi, sözdizimi

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; 

Temelde ne nasıl ara A'nın kurtulurum edilir soruyorum * Test yüzden tek satırda c değeri atayabilirsiniz?

+1

Neden "void **" değil, struct A ** '? – alk

+0

Bu da sorun değil. Yaptığım şey için değil, burada göstermemek için bir boşluğa ihtiyacım var. Sorun, son iki satırda yer almaktadır – user3548298

+0

'p-> b = (A **) malloc (sizeof (A *) * 3);' bozuk biçimlidir, derleyici şikayette bulunmalıdır –

cevap

2

Sadece

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

bunu yapabilirsiniz

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

Bu işe yarıyor! Yani bu boşluk hiç de önemli değil miydi? – user3548298

+0

@ user3548298: Bu yüzden sordum. ;-) – alk

-1

yapacağını

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

tanımlama yapın:

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

Yapamazsınız, 'A', C cinsinden bir tür değil. – alk