Zusammenfassung: Struct ändern - Ptr
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 49 von 63.
Aufgabe
EinfachErstellen Sie ein C-Programm, das ein vollständiges Mitarbeiterverwaltungssystem unter Verwendung von dynamischer Speicherallokation, Struct-Pointern und Funktionen demonstriert. Ihr Programm sollte:
- Definieren Sie ein
structnamensEmployeemit den folgenden Elementen:- Ein Integer
idzum Speichern der Mitarbeiter-ID - Ein Zeichen-Array
nameder Größe 50 zum Speichern des Mitarbeiternamens - Ein Zeichen-Array
departmentder Größe 30 zum Speichern des Abteilungsnamens - Ein Float
salaryzum Speichern des Mitarbeitergehalts - Ein Integer
yearsOfServicezum Speichern der Dienstjahre
- Ein Integer
- Schreiben Sie eine Funktion namens
fillEmployeeData, die:- Einen Pointer auf ein
Employee-Struct als Parameter entgegennimmt - Mitarbeiterinformationen in dieser Reihenfolge von der Eingabe liest: ID, name, department, salary, years of service
- Die Werte den Struct-Elementen unter Verwendung des Pfeiloperators zuweist
- Einen Bonus basierend auf den Dienstjahren berechnet: Wenn years >= 5, beträgt der Bonus 10% des Gehalts, andernfalls 5% des Gehalts
- Den Bonus zum Gehalt addiert:
empPtr->salary += bonus;
- Einen Pointer auf ein
- Schreiben Sie eine Funktion namens
displayEmployee, die:- Einen Pointer auf ein
Employee-Struct als Parameter entgegennimmt - Die Mitarbeiterinformationen in genau diesem Format ausgibt:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- Einen Pointer auf ein
- Schreiben Sie eine Funktion namens
promoteEmployee, die:- Einen Pointer auf ein
Employee-Struct als Parameter entgegennimmt - Das Gehalt unter Verwendung des Pfeiloperators um 15% erhöht
- Die Dienstjahre um 1 erhöht
Employee promoted successfully!ausgibt
- Einen Pointer auf ein
- In der main-Funktion:
- Deklarieren Sie einen Pointer auf ein
Employee-Struct namensempPtr - Verwenden Sie
malloc(), um dynamisch Speicher für einEmployee-Struct zu allokieren - Prüfen Sie, ob die Speicherallokation erfolgreich war:
- Wenn
empPtrgleichNULList, geben SieMemory allocation failedaus und beenden Sie das Programm - Wenn erfolgreich, geben Sie
Memory allocated successfullyaus
- Wenn
- Rufen Sie
fillEmployeeDataauf, um die Mitarbeiterdaten zu füllen - Geben Sie
Initial employee data:aus - Rufen Sie
displayEmployeeauf, um die ursprünglichen Mitarbeiterinformationen anzuzeigen - Rufen Sie
promoteEmployeeauf, um den Mitarbeiter zu befördern - Geben Sie
After promotion:aus - Rufen Sie
displayEmployeeerneut auf, um die aktualisierten Informationen anzuzeigen - Geben Sie den dynamisch allokierten Speicher mit
free(empPtr)frei - Geben Sie
Memory freed successfullyaus
- Deklarieren Sie einen Pointer auf ein
Diese Herausforderung kombiniert alle Schlüsselkonzepte aus dem Kapitel: Definieren von Structs, dynamische Speicherallokation mit malloc(), Überprüfung auf Allokationsfehler, Übergabe von Struct-Pointern an Funktionen, Verwendung des Pfeiloperators zum Zugriff auf und zur Änderung von Struct-Elementen sowie ordnungsgemäße Speicherbereinigung mit free(). Die Funktionen demonstrieren, wie Pointer die direkte Änderung der ursprünglichen Struct-Daten 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 Logic & Flow
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