BESTE WEBSITE FÜR WEBENTWICKLER
C Sprache. W3Schools auf Deutsch. Unterricht für Anfänger

Ua En Es

C Strukturen (structs)


Strukturen

Strukturen (auch Strukturen genannt) sind eine Möglichkeit, mehrere zusammengehörige Variablen an einem Ort zu gruppieren. Jede Variable in der Struktur wird als Mitglied der Struktur bezeichnet.

Im Gegensatz zu einem Array kann eine Struktur viele verschiedene Datentypen enthalten (int, float, char usw.).


Erstellen Sie eine Struktur

Sie können eine Struktur erstellen, indem Sie das Schlüsselwort struct verwenden und jedes seiner Mitglieder in geschweiften Klammern deklarieren:

struct MyStructure {   // Strukturdeklaration
  int myNum;           // Mitglied (int-Variable)
  char myLetter;       // Mitglied (char-Variable)
}; // Beenden Sie die Struktur mit einem Semikolon

Um auf die Struktur zuzugreifen, müssen Sie eine Variable davon erstellen.

Verwenden Sie das Schlüsselwort struct innerhalb der Methode main(), gefolgt vom Namen der Struktur und dann dem Namen der Strukturvariablen:

Erstellen Sie eine Strukturvariable mit dem Namen "s1":

struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  struct myStructure s1;
  return 0;
}

Auf Strukturmitglieder zugreifen

Um auf Mitglieder einer Struktur zuzugreifen, verwenden Sie die Punktsyntax (.):

Beispiel

// Erstellen Sie eine Struktur namens myStructure
struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  // Erstellen Sie eine Strukturvariable von myStructure mit dem Namen s1
  struct myStructure s1;

  // Weisen Sie den Mitgliedern von s1 Werte zu
  s1.myNum = 13;
  s1.myLetter = 'B';

  // Werte drucken
  printf("My number: %d\n", s1.myNum);
  printf("My letter: %c\n", s1.myLetter);

  return 0;
}
Try it Yourself »

Jetzt können Sie ganz einfach mehrere Strukturvariablen mit unterschiedlichen Werten erstellen, indem Sie nur eine Struktur verwenden:

Beispiel

// Erstellen Sie verschiedene Strukturvariablen
struct myStructure s1;
struct myStructure s2;

// Weisen Sie verschiedenen Strukturvariablen Werte zu
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';
Try it Yourself »

Was ist mit Strings in Strukturen?

Denken Sie daran, dass Strings in C eigentlich ein Array von Zeichen sind und Sie einem Array wie diesem leider keinen Wert zuweisen können:

Beispiel

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];  // String
};

int main() {
  struct myStructure s1;

  // Ich versuche, der Zeichenfolge einen Wert zuzuweisen
  s1.myString = "Some text";

  // Ich versuche, den Wert auszudrucken
  printf("My string: %s", s1.myString);

  return 0;
}

Es wird ein Fehler auftreten:

prog.c:12:15: error: assignment to expression with array type
Try it Yourself »

Dafür gibt es jedoch eine Lösung! Sie können die Funktion strcpy() verwenden und den Wert wie folgt s1.myString zuweisen:

Beispiel

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30]; // String
};

int main() {
  struct myStructure s1;

  // Weisen Sie der Zeichenfolge mithilfe der Funktion strcpy einen Wert zu
  strcpy(s1.myString, "Some text");

  // Drucken Sie den Wert aus
  printf("My string: %s", s1.myString);

  return 0;
}

Result:

My string: Some text
Try it Yourself »

Einfachere Syntax

Sie können Mitgliedern einer Strukturvariablen auch zum Zeitpunkt der Deklaration in einer einzigen Zeile Werte zuweisen.

Fügen Sie die Werte einfach in einer durch Kommas getrennten Liste in geschweiften Klammern ein {}. Beachten Sie, dass Sie bei dieser Technik nicht die Funktion strcpy() für Zeichenfolgenwerte verwenden müssen:

Beispiel

// Erstellen Sie eine Struktur
struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // Erstellen Sie eine Strukturvariable und weisen Sie ihr Werte zu
  struct myStructure s1 = {13, 'B', "Some text"};

  // Werte drucken
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
Try it Yourself »

Notiz: Die Reihenfolge der eingefügten Werte muss mit der Reihenfolge der in der Struktur deklarierten Variablentypen übereinstimmen (13 für int, „B“ für char usw.).


Strukturen kopieren

Sie können eine Struktur auch einer anderen zuordnen.

Im folgenden Beispiel werden die Werte von s1 nach s2 kopiert:

Beispiel

struct myStructure s1 = {13, 'B', "Some text"};
struct myStructure s2;

s2 = s1;
Try it Yourself »

Werte ändern

Wenn Sie einen Wert ändern/modifizieren möchten, können Sie die Punktsyntax verwenden (.).

Und um einen String-Wert zu ändern, ist die Funktion strcpy() wieder nützlich:

Beispiel

struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
 // Erstellen Sie eine Strukturvariable und weisen Sie ihr Werte zu
  struct myStructure s1 = {13, 'B', "Some text"};

  // Werte ändern
  s1.myNum = 30;
  s1.myLetter = 'C';
  strcpy(s1.myString, "Something else");

  // Werte drucken
  printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);

  return 0;
}
Try it Yourself »

Das Ändern von Werten ist besonders nützlich, wenn Sie Strukturwerte kopieren:

Beispiel

// Erstellen Sie eine Strukturvariable und weisen Sie ihr Werte zu
struct myStructure s1 = {13, 'B', "Some text"};

// Erstellen Sie eine weitere Strukturvariable
struct myStructure s2;

// Kopieren Sie die Werte von s1 nach s2
s2 = s1;

// S2-Werte ändern
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// Werte drucken
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);
Try it Yourself »

Ok, also, wie sind Strukturen nützlich?

Stellen Sie sich vor, Sie müssten ein Programm schreiben, um verschiedene Informationen über Autos wie Marke, Modell und Jahr zu speichern. Das Tolle an Strukturen ist, dass Sie eine einzige „Autovorlage“ erstellen und diese für jedes von Ihnen hergestellte Auto verwenden können. Unten finden Sie ein Beispiel aus dem wirklichen Leben.


Beispiel aus dem wirklichen Leben

Verwenden Sie eine Struktur, um verschiedene Informationen über Autos zu speichern:

Beispiel

struct Car {
  char brand[50];
  char model[50];
  int year;
};

int main() {
  struct Car car1 = {"BMW", "X5", 1999};
  struct Car car2 = {"Ford", "Mustang", 1969};
  struct Car car3 = {"Toyota", "Corolla", 2011};

  printf("%s %s %d\n", car1.brand, car1.model, car1.year);
  printf("%s %s %d\n", car2.brand, car2.model, car2.year);
  printf("%s %s %d\n", car3.brand, car3.model, car3.year);

  return 0;
}
Try it Yourself »

C Übungen

Testen Sie sich mit Übungen

Übung:

Füllen Sie den fehlenden Teil aus, um eine Car-Struktur zu erstellen:

 Car {
  char brand[50];
  char model[50];
  int year;
};