Strukturen

0

Variablen im Verbund

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

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

Übungsaufgaben zu Strukturen

Erstelle eine Struktur

Du kannst eine Struktur erstellen, indem Du das Schlüsselwort struct verwendest und jedes Strukturelement in geschweiften Klammern deklarierst:

struct MeineStruktur {   // Struktur deklarieren
  int nummer;           // Strukturelement (int-Variable)
  char einZeichen;       // Strukturelement (char-Variable)
}; // Ende der Struktur mit dem Komma

Um auf die Struktur zuzugreifen, musst Du eine Variable davon erstellen.

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

Erstellen Sie eine Strukturvariable mit dem Namen „s1“:

struct MeineStruktur {
  int nummer;         
  char einZeichen;    
};

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

Zugriff auf Strukturelemente

Um auf Strukturelemente Deiner Struktur zuzugreifen, verwendest Du die Punktsyntax (.):

Beispiel

struct MeineStruktur {
  int nummer;         
  char einZeichen;    
};

int main() {
  struct MeineStruktur s1;

  // Werte zuweisen
  s1.nummer = 13;
  s1.einZeichen = 'B';

  // Werte ausgeben
  printf("Nummer: %d\n", s1.nummer);
  printf("einZeichen: %c\n", s1.einZeichen);

  return 0;
}

Jetzt kannst Du ganz einfach mehrere Strukturvariablen mit unterschiedlichen Werten erstellen, indem Du nur eine Struktur verwendest:

Beispiel

// mehrere Struktur-Variablen deklarieren
struct MeineStruktur s1;
struct MeineStruktur s2;

// Werte zuweisen
s1.nummer = 13;
s1.einZeichen = 'B';

s2.nummer = 20;
s2.einZeichen = 'C';

Strings in Strukturen?

Bedenke, dass Zeichenfolgen in C eigentlich ein Array von Zeichen sind und dass Du einem Array keinen Wert direkt zuweisen kannst:

Beispiel

struct MeineStruktur {
  int nummer;
  char einZeichen;
  char name[30];  // String
};

int main() {
  struct MeineStruktur s1;

  // FEHLER: das geht so nicht!!!
  s1.name = "Klaus";

  // Wert ausgeben - korrekt
  printf("Name: %s", s1.name);

  return 0;
}

Es tritt ein Fehler auf:

prog.c:12:15: error: assignment to expression with array type

Es gibt jedoch eine Lösung dafür! Du musst die Funktion strcpy() verwenden und den Wert s1.myString wie folgt zuweisen:

Beispiel

struct MeineStruktur {
  int nummer;
  char einZeichen;
  char name[30];  // String
};

int main() {
  struct MeineStruktur s1;

  // Zuweisung über strcpy()
  strcpy(s1.name, "Klaus");

  // Wert ausgeben - korrekt
  printf("Name: %s", s1.name);

  return 0;
}

Ergebnis:

My string: Some text

Einfachere Syntax

Du kannst den Strukturelementen auch zum Zeitpunkt der Deklaration in einer einzigen Zeile Werte zuweisen.

Füge die Werte einfach in eine durch Kommas getrennte Liste in geschweifte Klammern {} ein. Beachte, dass Du bei dieser Technik die Funktion strcpy() für Strings nicht verwenden musst:

Beispiel

struct MeineStruktur {
  int nummer;
  char einZeichen;
  char name[30];  // String
};

int main() {
  struct MeineStruktur s1 = {13, 'B', "Klaus"};

  // Wert ausgeben - korrekt
  printf("Name: %s", s1.name);

  return 0;
}

Hinweis: 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

Du kannst auch eine Struktur 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;

Werte ändern

Wenn Du einen Wert ändern/modifizieren möchtest, kannst Du die Punktsyntax (.) verwenden. Und um einen String-Wert zu ändern, ist die Funktion strcpy() wieder nützlich:

Beispiel

struct MeineStruktur {
  int nummer;
  char einZeichen;
  char name[30];  // String
};

int main() {
  // Struktur erstellen und Werte zuweisen
  struct MeineStruktur s1 = {13, 'B', "Klaus"};

  // Werte verändern
  s1.nummer = 14;
  s1.einZeichen = 'F';
  strcpy(s1.name, "Hans");

  // Wert ausgeben - korrekt
  printf("Name: %s", s1.name);

  return 0;
}

Das Ändern von Werten ist insbesondere dann sinnvoll, wenn Du Strukturwerte kopierst:

Beispiel

// Struktur erstellen und Werte zuweisen
struct MeineStruktur s1 = {13, 'B', "Klaus"};

// weitere Variable für Struktur erstellen
struct MeineStruktur s2;

// Werte von s1 in s2 kopieren
s2 = s1;

// Werte in s2 ändern
s2.nummer = 30;
s2.einZeichen = 'C';
strcpy(s2.name, "Fritz");

// Werte ausgeben
printf("%d %c %s\n", s1.name, s1.einZeichen, s1.name);
printf("%d %c %s\n", s2.name, s2.einZeichen, s2.name);

Ok, also, wie sind Strukturen nützlich?

Stellen Dir Dir vor, Du musst ein Programm schreiben, um verschiedene Informationen über Autos zu speichern, wie etwa Marke, Modell und Baujahr. Das Tolle an Strukturen ist, dass Du eine einzige „Autovorlage“ erstellst und diese für alle Autos verwenden kannst. Unten findest Du ein Beispiel aus dem echten Leben.

Beispiel aus dem echten Leben

Verwende eine Struktur, um verschiedene Informationen zu Autos zu speichern:

Beispiel

struct Auto {
  char marke[50];
  char modell[50];
  int jahr;
};

int main() {
  struct Auto auto1 = {"BMW", "X5", 2001};
  struct Auto auto2 = {"Mercedes", "190", 1985};
  struct Auto auto3 = {"Opel", "Astra", 2011};

  printf("%s %s %d\n", auto1.marke, auto1.modell, auto1.jahr);
  printf("%s %s %d\n", auto2.marke, auto2.modell, auto2.jahr);
  printf("%s %s %d\n", auto3.marke, auto3.modell, auto3.jahr);

  return 0;
}

Übungsaufgaben zu Strukturen

Nach oben scrollen