Wir hatten uns in den letzten Abschnitten sehr intensiv mit dem Thema Zeiger und Felder und wie
sich das Ganze bei der Übergabe an Funktionen verhält beschäftigt. Und ich möchte jetzt noch
mal auf die andere Art von Verbunddatentypen, nämlich die Strukturen eingehen und die
Strukturen noch mal unter dem Aspekt der Übergabe an Funktionen und unter den Aspekten wie sie
im Zusammenhang mit Zeigern sich verhalten näher betrachten. Nehmen wir mal zwei Beispiele für
Strukturen her. Wir haben hier eine Struct Student, die besteht aus einem Feld, einem
Character-Feld-Nachname mit 25 Zeichen, einem Character-Feld-Vorname mit 25 Zeichen,
einem Character-Feld-Geburtsdatum mit 11 Zeichen, einem Integer-Matrikelnummer,
einem Shortwert-Gruppe und einem Character-Bestanden. Und eine zweite Struktur,
ein Struct-Komplex, die aus zwei Doubles besteht, nämlich einem Real- und einem
Imaginärteil. Diese zwei Strukturen werden wir jetzt in den nächsten Beispielen verwenden.
Und in diesem Abschnitt möchte ich auf das Thema Initialisierung von Strukturen noch mal eingehen.
Das hat jetzt mit Zeichern direkt gar nichts zu tun, aber der Vollständigkeit halber möchte
ich das jetzt hier an dieser Stelle noch mit einfügen. Dann geht es um die Fragestellung,
was passiert, wenn man Strukturen als Funktionsparameter übergibt. Das hatten
wir ja bei Feldern auch und hatten ja gesehen bei Feldern, dass sich Felder durchaus ja anders
verhalten wie normale Daten. Und hier werden wir wieder sehen, dass sich dieser verbundarten Typ
wiederum anders verhält. Dann geht es um Felder von Strukturen. Natürlich, wenn man einzelne
Strukturen hat und Strukturen mehr oder weniger schon wie normale Datentypen gehandhabt werden,
dann kann man natürlich auch Felder von Strukturen bilden. Und in dem Zusammenhang natürlich auch
wichtig, wie sieht es aus, wenn man Zeichn auf Strukturen hat. Das hatten wir ja auch schon mal
kurz uns angesehen. Strukturen können genauso wie Variablen und Felder bei der Definition
initialisiert werden. Und die Zuordnung zu den Komponenten erfolgt entweder aufgrund der Reihenfolge
der Nennung der Komponenten. Das wäre dann analog zur Initialisierung bei den Feldern. Oder auf
grund des angegebenen Namens. Das ist in neueren C Varianten, also Azeit C 99, eine alternative
Möglichkeit. Interessanterweise ist es so, dass in C++ die Initialisierung aufgrund der Reihenfolge
möglich ist. Ungenannte Komponenten werden mit Null initialisiert. Auch das ist wieder ähnlich
wie bei den Feldern. Wenn wir jetzt also so eine Strukt-Student haben, wie wir sie auf der letzten
Seite eingeführt haben, jetzt mal konkret definieren unter dem Namen Stud1, dann könnte
man die initialisieren. Und die Initialisierung erfolgt auch wieder, indem man in geschweiften
Klammern die einzelnen Initialisierungskomponenten angibt. Und der Nachname würde dann mit Maya
initialisiert werden. Das ist also eine richtige Feldinitialisierung. Das heißt also diese Zeichen
Mi, Er und der Nullcharakter werden in dieses 25er Array-Nachname hineinkopiert. In Vorname wird
Hans hineinkopiert, in das Geburtsdatum wird 24.01.1970 hineinkopiert. Die Matrikelnummer wird mit dem Wert 1533180
als Integerwert initialisiert. Der Shortwertgruppe wird mit 5 initialisiert und der Charakter
bestanden wird mit einem N, also steht wohl für nein, initialisiert. Die Struct-Komplex könnte man
analog initialisieren. Wenn wir also jetzt eine Struct-Komplex C1 anlegen, dann könnte ich die
initialisieren mit den Werten 1,2 und 0,8, das reale und imaginär Teil. Ich könnte sie aber auch
durch explizite Nennung dieser beiden Komponenten initialisieren. Ich könnte also sagen, der reale
Teil ist 0,5 und der imaginär Teil ist 0,33. Der Vorteil von dieser zweiten Art der Initialisierung
ist, wenn sich dann die Struktur-Deklaration ändert und möglicherweise weitere Komponenten eingeführt
werden, sich die Reihenfolge der Komponenten ändert, dann funktioniert diese Initialisierung
immer noch, ohne dass man sie anpassen müsste. Bei einer Initialisierung, so wie wir es hier oben
gemacht haben von dieser Struct Student, würde das nicht mehr funktionieren, wenn wir beispielsweise
zwischen Nachnamen und Vornamen noch ein weiteres kleines Array Initialen einfügen würden. Dann
würde anschließend diese konkrete Initialisierung schiefgehen, weil die Zuordnung einfach nicht mehr
passt. Dann würde Meier dem Nachnamen zugeordnet werden, Hans würde Initial hineinkopieren werden,
24.01.1970 in den Vornamen und an dieser Stelle würde es nicht mehr passen, weil hier haben wir
ein Integer und wir würden eigentlich ein Charakter Array erwarten. Also bei Zugriffen auf eine Struktur
werden die Komponenten immer durch die Komponentennamen identifiziert, aber bei der
Presenters
Zugänglich über
Offener Zugang
Dauer
00:22:48 Min
Aufnahmedatum
2020-05-07
Hochgeladen am
2020-05-07 19:56:10
Sprache
de-DE