Struct Pointerliste
-
Wieder mal eine Übung:
Schreiben Sie ein Programm, das Adresslisten verwaltet.
Ein Adressetikett etikett ist 6 Zeilen hoch und 60 Zeichen breit und enthält: Name,
Straße inkl. Hausnummer (zur Sicherheit reservieren wir 2 Zeilen), Postleitzahl, Ort,
Land.
Legen Sie die Etiketten (z.B. mit Testdaten) statisch in einem Array ab. Wenn die
Liste voll ist, sortieren Sie die Etiketten nach Postleitzahl. Um die Werte schnell zu
sortieren verwenden Sie ein Pointer Array, das auf die Speicheradressen der
Etiketten zeigt. Sortieren Sie also nicht die Etikettliste selbst, sondern die
Speicheradressen im Pointer Array.So ich habe jetzt ein Struct erzeugt Etiketten und die Elemente dazu.
Aber wie funktioniert das mit dem Pointer Array? Zuerst dachte ich, dass ich einfach auf die Speicheradressen des Struct Arrays zugreifen soll und diese sortiere, aber:
Die Adressliste sollte als Array von Pointern repräsentiert werden und diese Pointer sollte man sortieren. Dh. die aktuelle Herangehensweise ist nicht ganz richtig.
Jetzt versteh ich das nicht genau,Bitte wieder um Hilfe
LG
-
Die Antwort steckt in der Aufgabenstellung:
movco schrieb:
...Um die Werte schnell zu
sortieren verwenden Sie ein Pointer Array, das auf die Speicheradressen der
Etiketten zeigt. Sortieren Sie also nicht die Etikettliste selbst, sondern die
Speicheradressen im Pointer Array.
...Die Daten bleiben also wo sie sind, bloß die Zeiger im Zeigerarray werden sortiert.
Guckst du:
#include <stdio.h> #define ARRSIZE 3 typedef struct etikett Etikett; struct etikett { int dummy; }; void view( Etikett** e ) { unsigned i = 0; while ( i < ARRSIZE ) printf ("%d\n", e[i]->dummy ), i++; puts(""); } int main () { unsigned i = 0; Etikett etiketten[ARRSIZE] = {3,2,1}; // Datenarray. Etikett *p_etiketten[ARRSIZE] = {0}; // Zeigerarray. Etikett *help; for ( i = 0; i < ARRSIZE; i++ ) p_etiketten[i] = &etiketten[i]; // Initialisierung des Zeigerarray. view( p_etiketten ); // Sortieren. help = p_etiketten[0]; p_etiketten[0] = p_etiketten[2]; p_etiketten[2] = help; // Ergebnis bestaunen. :) view( p_etiketten ); return 0; }
-
Danke, jetzt versteh ich was damit gemeint ist :).
LG