NULL-Zeiger
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 5 von 63.
Manchmal müssen Sie einen Pointer deklarieren, haben aber keine gültige Speicheradresse, die Sie ihm sofort zuweisen können. In diesen Situationen ist es wichtig, den Pointer mit einem speziellen Wert namens NULL zu initialisieren.
Ein NULL-Pointer ist ein Zeiger, der auf keine gültige Speicheradresse zeigt. In C wird NULL normalerweise als 0 oder (void*)0 definiert. Wenn Sie einen Zeiger mit NULL initialisieren, geben Sie explizit an, dass er momentan auf nichts Nützliches zeigt.
int *ptr = NULL; // Initialisiere Pointer mit NULL
printf("%p", ptr); // Dies wird 0 oder (nil) ausgebenDas Initialisieren von Pointern auf NULL gilt als gute Programmierpraxis, da es verhindert, dass Ihr Pointer zufällige Garbage-Werte enthält. Ein nicht initialisierter Pointer könnte eine beliebige zufällige Speicheradresse enthalten, was zu unvorhersehbarem Verhalten führen kann, wenn Sie versehentlich versuchen, ihn zu verwenden.
Sie können prüfen, ob ein Pointer NULL ist, bevor Sie ihn verwenden, was dazu beiträgt, Abstürze zu verhindern und Ihren Code robuster zu machen. Diese Sicherheitsprüfung wird besonders wichtig, wenn Ihre Programme komplexer werden.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das die korrekte Initialisierung und Überprüfung von NULL-Pointern demonstriert. Ihr Programm sollte:
- Einen Pointer auf einen Integer namens
safe_ptrdeklarieren und ihn mit NULL initialisieren - Einen Pointer auf einen Character namens
char_ptrdeklarieren und ihn mit NULL initialisieren - Mit einer if-Anweisung prüfen, ob
safe_ptrNULL ist, und "safe_ptr is NULL" ausgeben, falls dies zutrifft - Mit einer if-Anweisung prüfen, ob
char_ptrNULL ist, und "char_ptr is NULL" ausgeben, falls dies zutrifft - Die in
safe_ptrgespeicherte Speicheradresse mitprintfund dem Formatspezifizierer%pausgeben - Die in
char_ptrgespeicherte Speicheradresse mitprintfund dem Formatspezifizierer%pausgeben
Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:
safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]Die tatsächlichen Speicheradressen werden je nach System als 0, (nil) oder eine ähnliche NULL-Darstellung angezeigt, aber das Format und die Bezeichnungen müssen exakt wie oben gezeigt übereinstimmen.
Spickzettel
Ein NULL-Pointer ist ein Zeiger, der auf keine gültige Speicheradresse zeigt. In C wird NULL normalerweise als 0 oder (void*)0 definiert.
Initialisieren Sie Pointer mit NULL, um zufällige Garbage-Werte zu vermeiden:
int *ptr = NULL; // Pointer mit NULL initialisieren
printf("%p", ptr); // Dies wird 0 oder (nil) ausgebenPrüfen Sie, ob ein Pointer NULL ist, bevor Sie ihn verwenden, um Abstürze zu vermeiden:
if (ptr == NULL) {
// Sicherer Umgang mit dem NULL-Fall
}Probier es selbst
#include <stdio.h>
int main() {
// TODO: Schreiben Sie hier Ihren Code
// Deklarieren und initialisieren Sie Ihre Pointer
// Überprüfen Sie, ob die Pointer NULL sind
// Geben Sie die erforderliche Ausgabe aus
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ä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