C-Strukturen meistern: Komplexe Daten effizient organisieren
Arrays erlauben die Definition von Variablen, die mehrere Datenitems desselben Typs halten können. Ähnlich ist eine Struktur (struct) ein weiterer benutzerdefinierter Datentyp in C, der es ermöglicht, Datenitems verschiedener Art zu kombinieren.
Strukturen werden verwendet, um einen Datensatz (Record) darzustellen. Angenommen, Sie möchten Bücher in einer Bibliothek verwalten. Sie könnten folgende Attribute tracken:
- Titel
- Autor
- Thema
- Buch-ID
Eine Struktur definieren
Um eine Struktur zu definieren, verwenden Sie die struct-Anweisung. Diese definiert einen neuen Datentyp mit mehreren Mitgliedern. Format:
struct [struktur_tag] {
mitglied_definition;
mitglied_definition;
...
} [eine_oder_mehr_strukturvariablen];
Der Struktur-Tag ist optional. Jede Mitgliedsdefinition ist eine normale Variablendefinition (z. B. int i; oder float f;). Am Ende der Definition können Sie optional Strukturvariablen angeben. Beispiel für eine Buch-Struktur:
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
Auf Strukturmitglieder zugreifen
Um auf ein Mitglied einer Struktur zuzugreifen, verwenden Sie den Mitgliedszugriffsoperator (.). Dieser wird als Punkt zwischen dem Strukturvariablennamen und dem gewünschten Mitglied geschrieben. Sie verwenden das Schlüsselwort struct, um Variablen des Strukturtyps zu definieren.
Beispiel
#include <stdio.h>
#include <string.h>
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main() {
struct Books Book1, Book2;
// Buch 1
strcpy(Book1.title, "C Programming");
strcpy(Book1.author, "Nuha Ali");
strcpy(Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
// Buch 2
strcpy(Book2.title, "Telecom Billing");
strcpy(Book2.author, "Zara Ali");
strcpy(Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
// Ausgabe Buch 1
printf("Buch 1 Titel: %s\n", Book1.title);
printf("Buch 1 Autor: %s\n", Book1.author);
printf("Buch 1 Thema: %s\n", Book1.subject);
printf("Buch 1 ID: %d\n", Book1.book_id);
// Ausgabe Buch 2
printf("Buch 2 Titel: %s\n", Book2.title);
printf("Buch 2 Autor: %s\n", Book2.author);
printf("Buch 2 Thema: %s\n", Book2.subject);
printf("Buch 2 ID: %d\n", Book2.book_id);
return 0;
}
Strukturen als Funktionsargumente
Sie können eine Struktur als Funktionsargument übergeben, genau wie jede andere Variable oder jeden Zeiger.
Beispiel: Übergabe per Wert
#include <stdio.h>
#include <string.h>
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
void printBook(struct Books book) {
printf("Titel: %s\n", book.title);
printf("Autor: %s\n", book.author);
printf("Thema: %s\n", book.subject);
printf("ID: %d\n", book.book_id);
}
int main() {
struct Books Book1 = {"C Programming", "Nuha Ali", "C Tutorial", 6495407};
struct Books Book2 = {"Telecom Billing", "Zara Ali", "Telecom Tutorial", 6495700};
printBook(Book1);
printBook(Book2);
return 0;
}
Zeiger auf Strukturen
Sie können Zeiger auf Strukturen definieren wie auf jede andere Variable:
struct Books *struct_pointer;
Speichern Sie die Adresse einer Strukturvariable:
struct_pointer = &Book1;
Um auf Mitglieder über einen Zeiger zuzugreifen, verwenden Sie den Pfeiloperator (->):
struct_pointer->title;
Beispiel: Strukturzeiger
#include <stdio.h>
#include <string.h>
struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};
void printBook(struct Books *book) {
printf("Titel: %s\n", book->title);
printf("Autor: %s\n", book->author);
printf("Thema: %s\n", book->subject);
printf("ID: %d\n", book->book_id);
}
int main() {
struct Books Book1 = {"C Programming", "Nuha Ali", "C Tutorial", 6495407};
struct Books Book2 = {"Telecom Billing", "Zara Ali", "Telecom Tutorial", 6495700};
printBook(&Book1);
printBook(&Book2);
return 0;
}
Bit-Felder (Bit Fields)
Bit-Felder ermöglichen das Packen von Daten in einer Struktur. Nützlich, wenn Speicher knapp ist. Beispiele:
- Mehrere Flags in ein Maschinenwort packen (1-Bit-Flags).
- Externe Dateiformate lesen – nicht-standard Formate, z. B. 9-Bit-Ganzzahlen.
In C definieren Sie dies durch :bitlänge nach der Variable:
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
unsigned int type:4;
unsigned int my_int:9;
} pack;
Hier enthält packed_struct 6 Mitglieder: vier 1-Bit-Flags, ein 4-Bit-Typ und ein 9-Bit-Integer. C packt diese so kompakt wie möglich, solange die maximale Feldlänge die Integer-Wortlänge des Computers nicht überschreitet.
C Sprache
- C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
- Semaphores in Nucleus RTOS: Utility Services & Data Structures
- Buchrezension: Digitise or Die – Ein Blueprint für IoT-getriebene Transformation
- Menschlichkeit im Zeitalter disruptiver Technologie bewahren
- Datenspeicher-Revolution: Nächstgen-Magnetnanostrukturen mit Unsichtbarkeitsumhang
- Top 17 Programmierbücher 2021, um Ihre Coding-Skills zu verbessern
- Java Datenstrukturen: Kernklassen & Collections Framework erkunden
- C typedef erklärt: Code vereinfachen mit benutzerdefinierten Typnamen
- C++ Datenstrukturen: Arrays, Structs & mehr für effiziente Programme
- C# Strukturen (struct): Werttypen definieren & verwenden