dynamisches Array von Zeigern auf Strukturen
-
Guten morgen allerseits.
habe mir gerde ne Lineare Liste gebastelt und nun hakelt es bei der Suchfunktion.
Der Rückgabewert soll ein Zeiger auf ein Array welches auf die enstsprechenden Strukturen zeigt. Das ganze muss dynamisch sein da ich ja die genaue Anzahl der Sucherfolge vorher natürlich nicht weiss. Quasi so.
z1-3 sind Zeiger auf arrays;
Zeiger ->array([z1],[z2],[z3])
Hat einer eine Ahnung wie ich das mit realloc lösen könnte?
struct kette *suchen(char *string) { struct kette *arbeit=NULL; int x=0; arbeit=liste; if(arbeit != NULL) { while(arbeit) { x=strcmp(arbeit->a->sHersteller,string); if(x==0) return arbeit; arbeit = arbeit->next; } } else return NULL; return NULL; }
-
Wo genau liegt jetzt das Problem??
-
Ich weiss nicht wie ich ein dynamisches array mit Pointern auf Strukturen anlege.
Der Quellcode liefert bislang nur das erste Element zurück soll aber alle zurückliefern bzw einen Zeiger auf diese.
-
Achso...
struct kette **liste; ... //Array mit Zeigern auf Struktur kette anlegen liste = malloc(anzstrukturen * sizeof(struct kette *)); ...
-
Könnte mir hier mal bitte jemand diesen code Schritt für Schritt erklären?
Zum verrecken kapiere ich ihn nicht.typedef struct {
int a; int b; } t_ab;t_ab d;
int a_b ( int *a, int b)
{
int erg = ++ (*a);
return erg + b;
}t_ab ab_f ( t_ab a, t_ab b)
{
a->a = a_b (&b.a, a->b);
a->b = b.b = 2b.a;
return d=b;
}main( )
{
t_ab a = {1,2}, b= {2,3}, c;
c=ab_f (&b, a);
printf( “b.a=%d b.b=%d c.a=%d c.b=%d\n”, b.a, b.b, c.a, c.b);
d=ab_f(&a, b);
printf( “a.a=%d a.b=%d d.a=%d d.b=%d\n”, a.a, a.b, d.a, d.b);
b=ab_f(&d,c);
printf( “b.a=%d b.b=%d d.a=%d d.b=%d\n”, b.a, b.b, d.a, d.b);
}Danke schon mal! ^^
-
//Deklaration eines neuen Typs (Struktur) typedef struct { int a; int b; } t_ab; //Deklaration der Variable d vom Typ t_ab (die Struktur von oben) t_ab d; //Definition der Funktion a_b int a_b ( int *a, int b) { //erhöht den Wert auf den parameter a zeigt und weißt diesen erg zu int erg = ++ (*a); //gibt die Summe von erg und dem parameter b zurück return erg + b; } //Definition der Funktion ab_f t_ab ab_f ( t_ab *a, t_ab b) { //weißt das Ergebnis von a_b auf das Element a des Parameters a zu a->a = a_b (&b.a, a->b); /*speichert den doppelten Wert des Elements a des Parameters b in das Element b des Parameters a und des Parameters b */ a->b = b.b = 2*b.a; //Kopiert die Werte von b auf die Werte von d und gibt d zurück return d=b; } //Die Hauptfunktion des Programms (hier sollten noch ein Rückgabewert (int) und die Parameter (void) festgelegt werden!) main( ) { //Deklaration und Definition der Variablen a, b und c (ohne Definition) vom Typ t_ab t_ab a = {1,2}, b= {2,3}, c; //Aufruf der Funktion ab_f; Der Rückgabewert wird auf c geschrieben c=ab_f (&b, a); //gibt die Werte von b und c aus printf( “b.a=%d b.b=%d c.a=%d c.b=%d\n”, b.a, b.b, c.a, c.b); //Aufruf der Funktion ab_f; Der Rückgabewert wird auf d geschrieben d=ab_f(&a, b); //gibt die Werte von a und d aus printf( “a.a=%d a.b=%d d.a=%d d.b=%d\n”, a.a, a.b, d.a, d.b); //Aufruf der Funktion ab_f; Der Rückgabewert wird auf b geschrieben b=ab_f(&d,c); //gibt die Werte von b und d aus printf( “b.a=%d b.b=%d d.a=%d d.b=%d\n”, b.a, b.b, d.a, d.b); //Hier sollte noch ein return kommen! }
-
Alles klar!
Danke, jetzt leuchtet es ein ^^