Structures

0

Bauwerke

Strukturen (auch Structs genannt) sind eine Möglichkeit, mehrere verwandte 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 ihrer Mitglieder in geschweiften Klammern deklarieren:

struct MyStructure {   // Structure declaration
  int myNum;           // Member (int variable)
  char myLetter;       // Member (char variable)
}; // End the structure with a semicolon

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

Verwenden Sie 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 myStructure {
  int myNum;
  char myLetter;
};

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

Zugriffsstrukturmitglieder

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

Beispiel

// Create a structure called myStructure
struct myStructure {
  int myNum;
  char myLetter;
};

int main() {
  // Create a structure variable of myStructure called s1
  struct myStructure s1;

  // Assign values to members of s1
  s1.myNum = 13;
  s1.myLetter = 'B';

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

  return 0;
}

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

Beispiel

// Create different struct variables
struct myStructure s1;
struct myStructure s2;

// Assign values to different struct variables
s1.myNum = 13;
s1.myLetter = 'B';

s2.myNum = 20;
s2.myLetter = 'C';

Was ist mit Zeichenfolgen in Strukturen?

Bedenken Sie, dass Zeichenfolgen in C eigentlich ein Array von Zeichen sind und Sie einem Array leider keinen Wert wie folgt zuweisen können:

Beispiel

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

int main() {
  struct myStructure s1;

  // Trying to assign a value to the string
  s1.myString = "Some text";

  // Trying to print the value
  printf("My string: %s", s1.myString);

  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! Sie können die Funktion strcpy() verwenden und den Wert s1.myString wie folgt zuweisen:

Beispiel

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

int main() {
  struct myStructure s1;

  // Assign a value to the string using the strcpy function
  strcpy(s1.myString, "Some text");

  // Print the value
  printf("My string: %s", s1.myString);

  return 0;
}

Ergebnis:

My string: Some text

Einfachere Syntax

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

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

Beispiel

// Create a structure
struct myStructure {
  int myNum;
  char myLetter;
  char myString[30];
};

int main() {
  // Create a structure variable and assign values to it
  struct myStructure s1 = {13, 'B', "Some text"};

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

  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

Sie können 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 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() {
  // Create a structure variable and assign values to it
  struct myStructure s1 = {13, 'B', "Some text"};

  // Modify values
  s1.myNum = 30;
  s1.myLetter = 'C';
  strcpy(s1.myString, "Something else");

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

  return 0;
}

Das Ändern von Werten ist insbesondere dann sinnvoll, wenn Sie Strukturwerte kopieren:

Beispiel

// Create a structure variable and assign values to it
struct myStructure s1 = {13, 'B', "Some text"};

// Create another structure variable
struct myStructure s2;

// Copy s1 values to s2
s2 = s1;

// Change s2 values
s2.myNum = 30;
s2.myLetter = 'C';
strcpy(s2.myString, "Something else");

// Print values
printf("%d %c %s\n", s1.myNum, s1.myLetter, s1.myString);
printf("%d %c %s\n", s2.myNum, s2.myLetter, s2.myString);

Ok, also, wie sind Strukturen nützlich?

Stellen Sie sich vor, Sie müssen ein Programm schreiben, um verschiedene Informationen über Autos zu speichern, wie etwa Marke, Modell und Baujahr. Das Tolle an Strukturen ist, dass Sie eine einzige „Autovorlage“ erstellen und diese für alle Autos verwenden können, die Sie bauen. Unten finden Sie ein Beispiel aus dem echten Leben.

Beispiel aus dem echten Leben

Verwenden Sie eine Struktur, um verschiedene Informationen zu 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;
}
Nach oben scrollen