Rückblick: Dynamische Arrays
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 37 von 63.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das ein dynamisches Array basierend auf Benutzereingaben erstellt, die Daten verarbeitet und eine ordnungsgemäße Speicherverwaltung demonstriert. Ihr Programm sollte:
- Einen Ganzzahlwert
nvom Benutzer einlesen, der die Anzahl der zu speichernden Elemente darstellt malloc()zusammen mitsizeof()verwenden, um dynamisch Speicher für ein Array vonnGanzzahlen zu reservieren- Überprüfen, ob die Speicherreservierung erfolgreich war - falls sie fehlschlägt, geben Sie
Memory allocation failed!aus und beenden Sie das Programm - Wenn die Reservierung erfolgreich ist, geben Sie
Array of size [n] created successfully!aus 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 gesamten verwendeten Speicher in Bytes im Format
Memory used: [bytes] bytesausgeben free()verwenden, um den Speicher wieder freizugebenMemory successfully freed!ausgeben, um die ordnungsgemäße Bereinigung zu bestätigen
Denken Sie daran, den Header <stdlib.h> einzubinden, um malloc() und free() verwenden zu können. Diese Herausforderung testet Ihr vollständiges Verständnis der dynamischen Speicherverwaltung, von der Reservierung über die Nutzung bis hin zur ordnungsgemäßen Bereinigung.
Wenn die Eingabe zum Beispiel wie folgt aussieht:
5
12 8 15 3 20Sollte Ihre Ausgabe wie folgt aussehen:
Array of size 5 created successfully!
Sum: 58
Minimum: 3
Elements above average: 2
Memory used: 20 bytes
Memory successfully freed!Diese umfassende Herausforderung demonstriert den vollständigen Lebenszyklus der dynamischen Speicherverwaltung, während gleichzeitig sinnvolle Datenverarbeitungsoperationen auf dem reservierten Array durchgeführt werden.
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 Speicher für n Ganzzahlen mit malloc()
// 2. Überprüfe, ob die Speicherreservierung erfolgreich war
// 3. Lies n Ganzzahlen in das Array ein
// 4. Berechne die Summe, finde das Minimum, zähle Elemente über dem Durchschnitt
// 5. Gib die Ergebnisse aus und gib den Speicher frei
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-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