/***************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* Beispielprogramm Nr. 37 */ /* der frueheren Vorlesung Datenverarbeitung */ /* */ /* Das Programm demonstriert die Benutzung von structs, die */ /* Pointer auf structs desselben Typs enthalten koennen. */ /* Hierdurch koennen ganze Ketten von structs dynamisch aufge- */ /* baut werden. */ /***************************************************************/ #include #include main() { /* Definition eines struct-Typs fuer Angestellte. Die Komponente chef ermoeglicht es, einen Pointer aufzunehmen, der auf eine entsprechende zweite struct verweist, die die Informationen ueber den Chef des Angestellten enthaelt. Da der Chef wiederum einen Pointer auf die struct seines Chefs haben kann usw., lassen sich so "Chef-Hierarchien" aufbauen (siehe unten im Programm). */ struct ang_info { char name[20]; int pers_nr; float gehalt; struct ang_info *chef; }; /* Deklaration eines Pointers, der auf die Info eines Angestellten zeigen soll. */ struct ang_info *ang_zeiger; /* Bereitstellung von Speicherplatz fuer die structs des Angestellten und der beiden Chefs darueber (per malloc()). Dabei Verkettung der structs ueber ihre chef-Pointer, so dass die gewuenschte Chef- Hierarchie entsteht. */ ang_zeiger = (struct ang_info *) malloc(sizeof(struct ang_info)); (*ang_zeiger).chef = (struct ang_info *) malloc(sizeof(struct ang_info)); (*(*ang_zeiger).chef).chef = (struct ang_info *) malloc(sizeof(struct ang_info)); /* Zuweisung an die Personalnummer-Komponente von *ang_zeiger: Aequivalente Benutzung der Konstrukte (*...). und ->. */ (*ang_zeiger).pers_nr = 1234; ang_zeiger->pers_nr = 1234; /* Zuweisung eines Werts an die Personalnummer-Komponente des Chefs des Chefs des Angestellten (also des "Hauptabteilungsleiters) */ ang_zeiger->chef->chef->pers_nr = 007; /* Abschluss der Verkettung der Chef-Hierarchie durch den NULL-Zeiger - WICHTIG! */ ang_zeiger->chef->chef->chef = NULL; getch(); }