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
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
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 »