Strukturen…

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