Initialisieren von Structs
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 42 von 63.
Während Sie struct-Variablen erstellen und ihren Elementen anschließend einzeln Werte zuweisen können, bietet C eine bequemere Möglichkeit, Initialwerte festzulegen. Sie können eine struct-Variable zum Zeitpunkt der Deklaration mithilfe einer in geschweifte Klammern eingeschlossenen Initialisierungsliste initialisieren.
Die Syntax für die Struct-Initialisierung lautet:
struct StructureName variableName = {value1, value2, ...};Mit unserem Point-struct-Beispiel können Sie es in einer einzigen, sauberen Zeile deklarieren und initialisieren:
struct Point p1 = {10, 20};Dies erstellt eine Point-Variable namens p1, wobei x auf 10 und y auf 20 gesetzt ist. Die Werte in der Initialisierungsliste werden den Struct-Membern in der Reihenfolge zugewiesen, in der sie in der Struct-Definition deklariert wurden.
Dieser Initialisierungsansatz ist nicht nur prägnanter als separate Zuweisungen, sondern stellt auch sicher, dass Ihr Struct mit sinnvollen Werten anstatt mit zufälligem Datenmüll beginnt. Er ist besonders nützlich, wenn Sie die Initialwerte zur Kompilierzeit kennen und effizient einsatzbereite Struct-Variablen erstellen möchten.
Aufgabe
EinfachErstellen Sie ein C-Programm, das die Initialisierung von Strukturen (structs) mithilfe von Initialisierungslisten demonstriert. Ihr Programm sollte Folgendes tun:
- Definieren Sie ein
structnamensEmployeemit den folgenden Elementen:- Ein Integer
id, um die Mitarbeiter-ID zu speichern - Ein Zeichen-Array
departmentmit der Größe 15, um den Abteilungsnamen zu speichern - Ein Integer
yearsOfService, um die Dienstjahre zu speichern - Ein Float
salary, um das Gehalt des Mitarbeiters zu speichern
- Ein Integer
- Erstellen Sie drei
Employee-Variablen mithilfe von Initialisierungslisten mit den folgenden Daten:emp1: ID 101, Abteilung "Engineering", 5 Dienstjahre, Gehalt 75000.50emp2: ID 102, Abteilung "Marketing", 3 Dienstjahre, Gehalt 65000.25emp3: ID 103, Abteilung "Sales", 8 Dienstjahre, Gehalt 80000.75
- Geben Sie die Informationen für jeden Mitarbeiter in genau diesem Format aus:
Employee 1:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 2:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]Employee 3:ID: [id]Department: [department]Years of Service: [yearsOfService]Salary: [salary]
- Berechnen und geben Sie das Gesamtgehalt aller drei Mitarbeiter im Format
Total Salary: [total]aus. - Berechnen und geben Sie die durchschnittlichen Dienstjahre im Format
Average Years of Service: [average]aus.
Diese Herausforderung testet Ihr Verständnis der Struktur-Initialisierung mithilfe von Initialisierungslisten, bei denen Sie Strukturvariablen in einer einzigen Zeile deklarieren und initialisieren. Die Werte in der Initialisierungsliste müssen in derselben Reihenfolge angegeben werden, in der die Elemente in der Strukturdefinition deklariert wurden.
Ihre erwartete Ausgabe sollte wie folgt aussehen:
Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33Spickzettel
Sie können eine struct-Variable zum Zeitpunkt der Deklaration mit einer in geschweiften Klammern eingeschlossenen Initialisierungsliste initialisieren:
struct StructureName variableName = {value1, value2, ...};Beispiel mit einer Point-Struct:
struct Point p1 = {10, 20};Die Werte in der Initialisierungsliste werden den struct-Elementen in der Reihenfolge zugewiesen, in der sie in der struct-Definition deklariert wurden. Dieser Ansatz ist prägnanter als separate Zuweisungen und stellt sicher, dass Ihre struct mit sinnvollen Werten anstatt mit zufälligen Datenmüll beginnt.
Probier es selbst
#include <stdio.h>
// TODO: Definieren Sie hier die Employee-Struktur
int main() {
// TODO: Erstellen Sie drei Employee-Variablen mithilfe von Initialisierungslisten
// TODO: Informationen für jeden Mitarbeiter ausgeben
// TODO: Gesamtgehalt und durchschnittliche Dienstjahre berechnen und ausgeben
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen7Strukturen (structs)
Was ist ein Struct?Deklarieren eines StructsErstellen von Struct-VariablenZugriff auf Struct-MemberInitialisieren von StructsZusammenfassung: Studentendaten-Struct2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen