Unterschied zwischen Struct und Typedef Struct in C

Mehvish Ashiq 12 Oktober 2023
  1. Struktur in C
  2. Unterschied zwischen struct und typedef struct in C
  3. Wichtige Punkte bei der Verwendung des Schlüsselworts typedef
Unterschied zwischen Struct und Typedef Struct in C

Dieses Tutorial erklärt und demonstriert anhand von Codebeispielen den Unterschied zwischen struct und typedef struct in der C-Programmierung.

Struktur in C

Bei der Verwendung von Arrays definieren wir den Typ der Variablen, der viele Datenelemente des gleichen Typs/der gleichen Art enthält. In ähnlicher Weise haben wir einen anderen benutzerdefinierten Datentyp in der C-Programmierung, der als Struktur bekannt ist und uns verschiedene Arten von Datenelementen kombinieren lässt.

Wir können einen Datensatz auch mithilfe von Strukturen darstellen. Beispielsweise können wir die Details der Person verfolgen, wobei jede Person die folgenden Attribute hat:

  • Vorname
  • Familienname, Nachname
  • Geschlecht
  • Alter
  • Handy, Mobiltelefon
  • Email
  • Adresse

Unterschied zwischen struct und typedef struct in C

Wir können eine Struktur mit struct und typedef struct definieren, aber mit dem Schlüsselwort typedef können wir alternative Namen für die benutzerdefinierten Datentypen (z. B. struct) und primitive Datentypen (z. B. int) schreiben.

Das Schlüsselwort typedef erstellt einen brandneuen Namen für einen bereits vorhandenen Datentyp, erstellt jedoch nicht den neuen Datentyp. Wir können einen saubereren und besser lesbaren Code haben, wenn wir das typedef struct verwenden, und es erspart uns (dem Programmierer) auch Tastatureingaben.

Das typedef struct kann das Deklarieren von Variablen vereinfachen und den äquivalenten Code mit vereinfachter Syntax bereitstellen. Dies kann jedoch zu einem unübersichtlicheren globalen Namensraum führen, was bei umfangreicheren Programmen zu Problemen führen kann.

Lassen Sie uns einen Beispielcode für beide Szenarien (das struct und das typedef struct) haben und den Unterschied verstehen.

Beispielcode ohne das Schlüsselwort typedef

#include <stdio.h>

struct Books {
  int id;
  char author[50];
  char title[50];
};

int main() {
  // declare `book1` and `book2` of type `Books`
  struct Books book1;
  struct Books book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

Ausgang:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

Der obige Code hat zwei Variablen, book1 und book2, vom Typ Books. Wir müssen immer wieder struct eingeben, wenn wir mehr Variablen deklarieren müssen, z. B. book3, book4 usw.

Hier kommt das typedef struct ins Spiel. Siehe das folgende Code-Snippet, das die Verwendung von typedef struct zeigt.

Beispielcode mit dem Schlüsselwort typedef

Wir können die typedef in den folgenden zwei Methoden verwenden.

Methode 1:

#include <stdio.h>

struct Books {
  int id;
  char author[50];
  char title[50];
};

typedef struct Books Book;

int main() {
  // declare `book1` and `book2` of type `Book`
  Book book1;
  Book book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

Ausgang:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

Methode 2:

#include <stdio.h>

typedef struct Books {
  int id;
  char author[50];
  char title[50];
} Book;

int main() {
  // declare `book1` and `book2` of type `Book`
  Book book1;
  Book book2;

  // the specifications for the `book1`
  book1.id = 1;
  strcpy(book1.author, "Zara Ali");
  strcpy(book1.title, "Tutorials for C Programming");

  // the specifications for the `book2`
  book2.id = 2;
  strcpy(book2.author, "Zaid Ali");
  strcpy(book2.title, "Tutorials for Java Programming");

  // display information for `book1` and `book2`
  printf("The id of book1: %d\n", book1.id);
  printf("The author of the book1: %s\n", book1.author);
  printf("The title of the book1: %s\n", book1.title);

  printf("The id of book2: %d\n", book2.id);
  printf("The author of the book2: %s\n", book2.author);
  printf("The title of the book2: %s\n", book2.title);

  return 0;
}

Ausgang:

The id of book1: 1
The author of the book1: Zara Ali
The title of the book1: Tutorials for C Programming
The id of book2: 2
The author of the book2: Zaid Ali
The title of the book2: Tutorials for Java Programming

Die zweite Methode zeigt, dass die Verwendung von typedef organisierter, sauberer und einfacher zu verstehen und zu verwalten erscheint.

Wichtige Punkte bei der Verwendung des Schlüsselworts typedef

Bei der Verwendung des Schlüsselworts typedef müssen wir einige Punkte beachten. In dem oben angegebenen Code definieren wir die Struktur wie folgt.

typedef struct Books {
  int id;
  char author[50];
  char title[50];
} Book;

Hier haben wir einen neuen Strukturtyp, struct Books, und den Alias namens Book für die struct Books. Sie fragen sich vielleicht, warum der Aliasname mit dem Zusatz typedef wie bei jeder anderen gewöhnlichen Deklaration am Ende der Deklaration steht.

typedef wurde in die exakte Spezifiziererkategorie wie die Speicherklassenspezifizierer eingefügt, zum Beispiel auto und static. Wir können auch ohne den Tag-Namen deklarieren, wenn wir nur die Typkennung Book verwenden wollen.

typedef struct {
  int id;
  char author[50];
  char title[50];
} Book;

Bei der Verwendung von Strukturen müssen wir uns um das kümmern, was wir eine Variable und einen Alias nennen sollten. Wenn wir die anonyme Struktur wie folgt verwenden (anonym, weil die Struktur keinen Namen hat), dann wäre das Buch die Strukturvariable des benutzerdefinierten Datentyps.

struct {
  int id;
  char author[50];
  char title[50];
} Book;

Wenn wir dieselbe Struktur wie oben verwenden, aber mit dem Schlüsselwort typedef, dann wäre das Book ein Alias (Synonym) für die Datentypstruktur, und wir können damit Variablen deklarieren (siehe unten).

typedef struct {
  int id;
  char author[50];
  char title[50];
} Book;
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - C Struct