Grundlegendes:
C bietet die Möglichkeit mehrere Datentypen in Strukturen zusammenzufassen. So entsteht ein eigener Datentyp.
struct new_type {int id; char filename [8]; int sectors};
struct new_type new_var;
struct new_type {int id; char filename [8]; int sectors} new_var;
In beiden Fällen lassen sich die Struktur Elemente über den Punkt Operator ansprechen:
new_var.id=8
Von new_type lassen sich weitere Instanzen ableiten, ähnlich wie man das in Objektorientierten Sprachen mit neuen Objekten macht:
struct new_type new_var_2;
Pointer auf Strukturen:
Absichtlich frei gelassen 🙂
Strukturen an Funktionen übergeben:
struct new_type {int id; char filename [8]; int sectors} new_var;
Wir wollen der Funktion test(..) die Instanz new_var übergeben und dort der Instanz Variabel id einen neuen Wert zuweisen.
Aufruf:
test (&new_var);
Des Pudels Kern zum Verständnis ist nun die Klärung der Frage, wie wird test deklariert?
void test (struct test *test_pointer);
Innerhalb der Deklaration von test, bilden wir eine neue Instanz von test – *test_pointer – und signalisieren das die keine neue Variable ist, sondern lediglich der Zeiger auf die Struktur test.
Auf die Instanzvariabeln von test, muss/ kann/ darf man nun über den pointer test zugreifen:
(*test_pointer).id=22;
(*…). lässt sich – viel anschaulicher – über den Pfeil Operator (- >) abkürzen:
test_pointer->id=22;
Array’s von Strukturen
Geht relativ einfach, so:
struct new_type {int id; char filename [8]; int sectors} new_var[8];
Der Zugriff auf die Strukturelemente geht genau so wie oben gezeigt, über den Punkt- Operator:
new_var[1].id=8
Wenn ich new_var[8] an eine Funktion übergeben möchte, mache ich das genauso wie weiter oben gezeigt:
test (&new_var);
Zugriff auf die Struktur Elemente innerhalb von test:
test_pointer->id=22;
Wie greift man auf das nächste Element der Struktur Variable new_var auf – auf die nun test_pointer zeigt – zu? Man erhöht den Zeiger um eins!
*test_pointer++;
test_pointer->id=23;
In main lassen sich die Werte aus id auf herkömmliche Art- und Weise, das heißt nicht über einen Zeiger auf die Strukturvariable sondern über die Strukturvariable selbst aufrufen: id_n= new_var[n].id