Rückblick: Dynamische Arrays
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 37 von 63.
Aufgabe
EinfachSchreibe ein C-Programm, das basierend auf Benutzereingaben ein dynamisches Array erstellt, die Daten verarbeitet und eine ordnungsgemäße Speicherverwaltung demonstriert. Dein Programm sollte:
- Eine Ganzzahl
nvom Benutzer einlesen, die die Anzahl der zu speichernden Elemente angibt - Mit
malloc()undsizeof()dynamisch Speicher für ein Array ausnGanzzahlen reservieren - Prüfen, ob die Speicherreservierung erfolgreich war – falls nicht,
Memory allocation failed!ausgeben und das Programm beenden - Bei erfolgreicher Speicherreservierung
Array of size [n] created successfully!ausgeben nGanzzahlwerte vom Benutzer einlesen und im reservierten Array speichern- Die Summe aller Elemente berechnen und im Format
Sum: [value]ausgeben - Den Minimalwert finden und im Format
Minimum: [value]ausgeben - Zählen, wie viele Elemente größer als der Durchschnitt sind, und im Format
Elements above average: [count]ausgeben - Den insgesamt verwendeten Speicher in Bytes im Format
Memory used: [bytes] bytesausgeben - Mit
free()den Speicher freigeben Memory successfully freed!ausgeben, um die ordnungsgemäße Freigabe zu bestätigen
Denke daran, den Header <stdlib.h> einzubinden, um malloc() und free() verwenden zu können. Diese Herausforderung prüft dein umfassendes Verständnis der dynamischen Speicherverwaltung – von der Reservierung über die Nutzung bis zur ordnungsgemäßen Freigabe.
Wenn die Eingabe zum Beispiel lautet:
5
12 8 15 3 20Deine Ausgabe sollte lauten:
Array of size 5 created successfully!
Sum: 58
Minimum: 3
Elements above average: 3
Memory used: 20 bytes
Memory successfully freed!Diese umfassende Herausforderung veranschaulicht den vollständigen Lebenszyklus der dynamischen Speicherverwaltung und führt gleichzeitig sinnvolle Datenverarbeitungsoperationen auf dem reservierten Array aus.
Probier es selbst
#include <stdio.h>
#include <stdlib.h>
int main() {
// Lies die Anzahl der Elemente ein
int n;
scanf("%d", &n);
// TODO: Schreibe deinen Code unten
// 1. Reserviere mit malloc() Speicher für n Ganzzahlen
// 2. Prüfe, ob die Speicherreservierung erfolgreich war
// 3. Lies n Ganzzahlen in das Array ein
// 4. Berechne die Summe, finde das Minimum und zähle die Elemente über dem Durchschnitt
// 5. Gib die Ergebnisse aus und gib den Speicher frei
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-Funktionen6Speicherverwaltung
Stack vs. Heap SpeicherDynamische Allokation - malloc()Verwendung von sizeof() für die AllokationÜberprüfung auf AllokationsfehlerSpeicher freigeben mit free()Allokation mit calloc()Rückblick: Dynamische ArraysÜbe selbstständig: Online-C-Compiler