Zusammenfassung: Struct ändern - Ptr
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 49 von 63.
Aufgabe
EinfachErstelle ein C-Programm, das ein vollständiges Mitarbeiterverwaltungssystem unter Verwendung dynamischer Speicherzuweisung, Strukturzeiger und Funktionen demonstriert. Dein Programm sollte:
- Eine
structnamensEmployeemit den folgenden Mitgliedern definieren:- Eine Ganzzahl
idzum Speichern der Mitarbeiter-ID - Ein Zeichen-Array
namemit der Größe 50 zum Speichern des Mitarbeiternamens - Ein Zeichen-Array
departmentmit der Größe 30 zum Speichern des Abteilungsnamens - Eine Gleitkommazahl
salaryzum Speichern des Mitarbeitergehalts - Eine Ganzzahl
yearsOfServicezum Speichern der Dienstjahre
- Eine Ganzzahl
- Eine Funktion namens
fillEmployeeDataschreiben, die:- Einen Zeiger auf eine
Employee-Struktur als Parameter entgegennimmt - Mitarbeiterinformationen in dieser Reihenfolge von der Eingabe einliest: ID, Name, Abteilung, Gehalt, Dienstjahre
- Die Werte mithilfe des Pfeiloperators den Strukturmitgliedern zuweist
- Einen Bonus basierend auf den Dienstjahren berechnet: Wenn die Dienstjahre >= 5 sind, beträgt der Bonus 10 % des Gehalts, andernfalls 5 % des Gehalts
- Den Bonus zum Gehalt addiert:
empPtr->salary += bonus;
- Einen Zeiger auf eine
- Eine Funktion namens
displayEmployeeschreiben, die:- Einen Zeiger auf eine
Employee-Struktur als Parameter entgegennimmt - Die Mitarbeiterinformationen in diesem exakten Format ausgibt:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Einen Zeiger auf eine
- Eine Funktion namens
promoteEmployeeschreiben, die:- Einen Zeiger auf eine
Employee-Struktur als Parameter entgegennimmt - Das Gehalt mithilfe des Pfeiloperators um 15 % erhöht
- Die Dienstjahre um 1 erhöht
Employee promoted successfully!ausgibt
- Einen Zeiger auf eine
- In der main-Funktion:
- Einen Zeiger auf eine
Employee-Struktur namensempPtrdeklarieren malloc()verwenden, um dynamisch Speicher für eineEmployee-Struktur zuzuweisen- Überprüfen, ob die Speicherzuweisung erfolgreich war:
- Wenn
empPtrNULList,Memory allocation failedausgeben und das Programm beenden - Bei Erfolg
Memory allocated successfullyausgeben
- Wenn
fillEmployeeDataaufrufen, um die Mitarbeiterdaten auszufüllenInitial employee data:ausgebendisplayEmployeeaufrufen, um die anfänglichen Mitarbeiterinformationen anzuzeigenpromoteEmployeeaufrufen, um den Mitarbeiter zu befördernAfter promotion:ausgebendisplayEmployeeerneut aufrufen, um die aktualisierten Informationen anzuzeigen- Den dynamisch zugewiesenen Speicher mit
free(empPtr)freigeben Memory freed successfullyausgeben
- Einen Zeiger auf eine
Diese Aufgabe verbindet alle wichtigen Konzepte aus dem Kapitel: das Definieren von Strukturen, die dynamische Speicherzuweisung mit malloc(), die Überprüfung auf fehlgeschlagene Speicherzuweisung, das Übergeben von Strukturzeigern an Funktionen, die Verwendung des Pfeiloperators zum Zugreifen auf und Ändern von Strukturmitgliedern sowie die ordnungsgemäße Speicherbereinigung mit free(). Die Funktionen demonstrieren, wie Zeiger eine direkte Änderung der Daten der ursprünglichen Struktur ermöglichen.
Probier es selbst
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Definieren Sie hier die Employee-Struktur
// TODO: Implementieren Sie hier die Funktion fillEmployeeData
// TODO: Implementieren Sie hier die Funktion displayEmployee
// TODO: Implementieren Sie hier die Funktion promoteEmployee
int main() {
// TODO: Deklarieren Sie empPtr und weisen Sie Speicher zu
// TODO: Überprüfen Sie, ob die Speicherzuweisung erfolgreich war
// TODO: Mitarbeiterdaten ausfüllen, Anfangsdaten anzeigen, befördern und nach der Beförderung anzeigen
// TODO: Speicher freigeben und Erfolgsmeldung ausgeben
return 0;
}Alle Lektionen in Logik & Ablauf
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer 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Übe selbstständig: Online-C-Compiler