2016-04-07 19 views
0

Ich habe eine Struktur A und ein Array von Zeigern auf Instanzen dieser Struktur
Ich bin auf ein Mitglied direkt aus dem Array zugreifen, aber ich weiß nicht, was ist die richtige Syntax, es zu tun:C - Array von Zeigern auf Struktur, Syntax

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; 

im Grunde, was ich frage ist, wie kann ich von dem Zwischen A loszuwerden * Test so kann ich den Wert von c in einer Zeile zuweisen?

+1

Warum 'void **' und nicht 'struct A **'? – alk

+0

Das ist irrelevent. Ich brauche nur eine Lücke für das, was ich mache, aber nicht hier. Das Problem liegt in den zwei letzten Zeilen – user3548298

+0

'p-> b = (A **) malloc (sizeof (A *) * 3)' 'ist schlecht gebildet, der Compiler sollte sich beschweren –

Antwort

2

Just do

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

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

Definition dieses

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

Das funktioniert, Sie rocken! Also war diese Leere doch irgendwie relevant? – user3548298

+0

@ user3548298: Deshalb fragte ich. ;-) – alk

-1

tun würden Sie tun können:

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

Du kannst nicht, da 'A' kein Typ in C ist. – alk