Strukturierte Datentypen in C - Struct und Typedef werden anhand von Beispielen erläutert

Während Ihrer Programmiererfahrung haben Sie möglicherweise das Bedürfnis, Ihren eigenen Datentyp zu definieren. In C erfolgt dies mit zwei Schlüsselwörtern: structund typedef. Strukturen und Gewerkschaften geben Ihnen die Möglichkeit, inhomogene Datentypen in einer einzigen Sammlung zu speichern.

Deklarieren eines neuen Datentyps

typedef struct student_structure{ char* name; char* surname; int year_of_birth; }student;

Nach diesem kleinen Code studentwird ein neues reserviertes Schlüsselwort angezeigt und Sie können Variablen vom Typ erstellen student. Bitte beachten Sie, dass diese neue Art von Variablen strukturiert wird, was bedeutet, dass eine physisch gruppierte Liste von Variablen definiert wird, die unter einem Namen in einem Speicherblock platziert werden sollen.

Verwendung neuer Datentypen

Erstellen wir nun eine neue studentVariable und initialisieren ihre Attribute:

 student stu; strcpy( stu.name, "John"); strcpy( stu.surname, "Snow"); stu.year_of_birth = 1990; printf( "Student name : %s\n", stu.name); printf( "Student surname : %s\n", stu.surname); printf( "Student year of birth : %d\n", stu.year_of_birth);

Wie Sie in diesem Beispiel sehen können, müssen Sie allen Variablen in Ihrem neuen Datentyp einen Wert zuweisen. Um auf eine Strukturvariable zuzugreifen, können Sie den Punkt wie in verwenden stu.name. Es gibt auch eine kürzere Möglichkeit, einer Struktur Werte zuzuweisen:

typedef struct{ int x; int y; }point; point image_dimension = {640,480};

Oder wenn Sie es vorziehen, die Werte in einer anderen Reihenfolge festzulegen:

point img_dim = { .y = 480, .x = 640 };

Gewerkschaften gegen Strukturen

Gewerkschaften werden in derselben Form wie Strukturen deklariert, unterscheiden sich jedoch, da immer nur ein Element innerhalb der Gewerkschaft verwendet werden kann.

typedef union{ int circle; int triangle; int ovel; }shape;

Sie sollten unionin einem Fall verwenden, in dem nur eine Bedingung angewendet wird und nur eine Variable verwendet wird. Bitte vergessen Sie nicht, dass wir auch unseren brandneuen Datentyp verwenden können:

typedef struct{ char* model; int year; }car_type; typedef struct{ char* owner; int weight; }truck_type; typedef union{ car_type car; truck_type truck; }vehicle;

Noch ein paar Tricks

  • Wenn Sie mit dem &Operator einen Zeiger auf eine Struktur erstellen , können Sie sie mit dem speziellen ->Infix-Operator zurückstellen. Dies wird beispielsweise bei der Arbeit mit verknüpften Listen in C sehr häufig verwendet
  • Der neu definierte Typ kann für fast alles genauso wie andere Grundtypen verwendet werden. Versuchen Sie beispielsweise, ein Array vom Typ zu erstellen studentund zu sehen, wie es funktioniert.
  • Strukturen können kopiert oder zugewiesen werden, aber Sie können sie nicht vergleichen!

Mehr Informationen:

  • Das C-Anfängerhandbuch: Lernen Sie in wenigen Stunden die Grundlagen der C-Programmiersprache
  • Datentypen in C - Integer, Floating Point und Void Explained
  • malloc in C: Dynamische Speicherzuordnung in C erklärt