Zurück zu: C Tutorial
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;
}