Strukturierte Datentypen II
Vorhin haben wir uns mit dem Anlegen stukturierter Datenstrukturen beschäftigt. Nun wollen wir mit ihnen auch arbeiten. In diesem Beitrag zeigen wir dir wie du dabei vorgehst.
Inhaltsübersicht
Nutzung strukturierter Datentypen
Im letzten Video hast du ja bereits gelernt, wie du strukturierte Datentypen definierst. Nun wollen wir sie aber auch nutzen können. Deswegen fangen wir gleich mit diesem Codebeispiel an.
Hier sehen wir einige, bereits definierte neue Typen. Was uns dabei auffällt ist, dass sie alle etwas anders formuliert sind, als die, die du bis jetzt gesehen hast. Das hat aber einen ganz bestimmten Zweck.
Definition mit typedef
Wenn wir die Definition ohne typedef durchführen, ist es nämlich umständlicher, „Objekte“ dieses Typs zu deklarieren. Das liegt daran, dass du dann ein Objekt so definieren musst:
struct product popcorn = {1, „Popcorn“, 2.50, 9};
Haben wir typedef aber verwendet, verkürzt sich diese Anweisung zu:
Das scheint jetzt nicht viel Ersparnis zu sein, jedoch macht es eine ganze Menge an Schreibarbeit aus, wenn du z. B. 50 Arbeitgeber anlegen oder ein ganzes Sortiment im Supermarkt generieren musst.
Deklarierung und Initialisierung der Datenstruktur
Genau das machen wir jetzt, wenn auch im kleineren Umfang. Als Erstes erstellen wir uns ein Testprodukt „Popcorn“, das wir ganz einfach deklarieren und initialisieren können wie ein Array. Dabei steht jeder Wert für eine Komponente der Struktur. Es wird also automatisch die Eins der Produktnummer zugeordnet, der eingegebene String dem Namen und so weiter.
Du musst Strukturen aber nicht gleich initialisieren. Du kannst sie auch einfach nur in Existenz bringen, wie du in der zweiten Zeile bereits sehen kannst.
Besonderheit beim Datentyp storage
Bei unserem dritten Strukturtypen wird das Ganze etwas interessanter: Wenn du genauer hinschaust, siehst du, dass in der Definition der Struktur storage eine Komponente angegeben ist, die uns etwas stutzig macht.
Ein Objekt vom Typ storage kann nämlich ein Objekt vom Typ Produkt enthalten. Das ist im echten Leben für uns selbstverständlich. Natürlich werden Produkte im Lagerraum abgelegt! Aber hier im Code ist es etwas Besonderes. Normalerweise werden solche Strukturen entweder static oder global deklariert. Das liegt daran, dass sie, wenn sie ganze Listen von anderen Datentypen enthalten, extrem groß werden und dadurch unter Umständen zu einem Stack-Overflow führen können.
Zugriff auf die Strukturkomponenten
Nun, da das geklärt ist, können wir unser Popcorn ja einlagern. Wie kommen wir jetzt aber an unsere abgespeicherten Werte ran? Das ist ganz einfach. Weißt du noch, wie du in Java Objekte angesprochen hast? Genauso machen wir es hier. Das heißt, wir nehmen unser basement-Objekt und hängen einen Punkt, gefolgt von unserem gewünschten Attribut an. Auf diese Weise kannst du Komponenten einer Struktur neue Werte zuweisen, diese manipulieren und ausgeben.
Dabei können diese „Punkt-Ketten“ ziemlich lang werden, wie du hier siehst. Dennoch funktioniert eine solche Ausgabe und das ist ziemlich praktisch, sollte zum Beispiel ein Mitarbeiter einmal prüfen wollen, was und wie viel noch im Lager vorhanden ist, kann er nachsehen ohne in den Keller laufen zu müssen.
Jetzt weißt du nicht nur wie du diese strukturierten Datentypen definierst, sondern auch wie du sie anwendest. Leg am besten gleich los und probiere es einmal aus!