Das Verwenden von Nullzeigern in der C-Programmierung

CBeginner
Jetzt üben

Einführung

Ein Nullzeiger ist ein Zeiger, der auf keine Speicheradresse zeigt. In der C-Programmierung wird ein Nullzeiger durch die Konstante NULL dargestellt, die in der Headerdatei stdio.h definiert ist. Das Verwenden eines Nullzeigers kann helfen, Fehler zu vermeiden und Funktionalität zu C-Programmen hinzuzufügen.

In diesem Lab werden Sie über Nullzeiger lernen und erfahren, wie Sie sie in der C-Programmierung verwenden. Sie werden ein Programm erstellen, das Nullzeiger verwendet, um Namen in einem Array zu suchen.

Hinweis: Sie müssen die Datei ~/project/main.c selbst erstellen, um zu üben, wie Sie es mit gcc kompilieren und ausführen.

cd ~/project
## main.c erstellen
touch main.c
## main.c kompilieren
gcc main.c -o main
## main ausführen
./main

Einen Nullzeiger deklarieren

In der C-Programmierung ist ein Nullzeiger ein Zeiger, der auf nichts zeigt. Um einen Nullzeiger zu deklarieren, können Sie dem Zeiger-Variable den Wert NULL zuweisen.

#include <stdio.h>

int main() {
   int *ptr = NULL;    // ptr ist ein Nullzeiger
   return 0;
}

Einen void-Zeiger deklarieren

Ein Void-Zeiger (void pointer) ist ein Zeiger, der keinen spezifischen Typ hat. Er kann verwendet werden, um auf jede Art von Daten zu zeigen. Um einen Void-Zeiger zu deklarieren, verwenden Sie das Schlüsselwort void vor dem Sternchen (*).

Ein void-Zeiger muss in einen anderen Datentyp umgewandelt (gecastet) werden, bevor er dereferenziert oder für Zeigerarithmetik verwendet werden kann.

#include <stdio.h>

int main() {
   int n = 10;
   void *ptr = &n; // ptr ist ein Void-Zeiger, der auf einen int zeigt
   printf("Value of n: %d\n", *(int*)ptr); // Vor dem Dereferenzieren in einen int-Zeiger umwandeln (casten)
   return 0;
}

Den Nullzeiger verwenden, um das Ende eines Zeigerarrays zu markieren

Sie können in der C-Programmierung einen Nullzeiger verwenden, um das Ende eines Zeigerarrays zu markieren. Dies kann nützlich sein, wenn Sie in einem Array nach Namen oder anderen Daten suchen.

#include <stdio.h>
#include <string.h>

int search(char *ptr[], char* name);

char *names[] = {
    "John",
    "Peter",
    "Thor",
    "Chris",
    "Tony",
    NULL
};

int main(void)
{
    if(search(names, "Peter")!= 1)
    {
        printf("Peter ist in der Liste.\n");
    }

    if(search(names, "Scarlett") == -1)
    {
        printf("Scarlett nicht gefunden.\n");
    }

    return 0;
}

// definieren Sie die Suchfunktion
int search(char *ptr[], char*name)
{
    for(int i=0; ptr[i]; ++i)
    {
        if(!strcmp(ptr[i], name))
        {
            return i;
        }
    }

    return -1;  // Name nicht gefunden
}

Das Programm für die Benutzereingabe anpassen

Sie können das Programm anpassen, um es dem Benutzer zu ermöglichen, Namen für das Array einzugeben und nach Namen zu suchen. Dies kann mit der scanf()-Funktion in der C-Programmierung erreicht werden.

#include <stdio.h>
#include <string.h>

#define MAX_NAMES 100

int search(char *ptr[], char* name);

int main(void)
{
    char *names[MAX_NAMES];
    char name[50];
    int count = 0;

    printf("Geben Sie Namen ein (Drücken Sie die Enter-Taste, um zu stoppen):\n");

    // Namen aus der Benutzereingabe erhalten
    while(1)
    {
        scanf("%s", name);

        if(strcmp(name, "") == 0)
        {
            break;
        }

        names[count] = (char*) malloc(strlen(name)+1);
        strcpy(names[count], name);
        count++;
    }

    names[count] = NULL;    // Markiere das Ende des Arrays mit einem Nullzeiger

    // Namen suchen
    while(1)
    {
        printf("Geben Sie den Namen ein, nach dem gesucht werden soll (Drücken Sie die Enter-Taste, um zu stoppen):\n");
        scanf("%s", name);

        if(strcmp(name, "") == 0)
        {
            break;
        }

        int index = search(names, name);

        if(index!= -1)
        {
            printf("%s wurde an Index %d gefunden.\n", name, index);
        }
        else
        {
            printf("%s nicht gefunden.\n", name);
        }
    }

    return 0;
}

// Definiere die Suchfunktion
int search(char *ptr[], char*name)
{
    for(int i=0; ptr[i]; ++i)
    {
        if(!strcmp(ptr[i], name))
        {
            return i;
        }
    }

    return -1;  // Name nicht gefunden
}

Zusammenfassung

In diesem Lab haben Sie über Nullzeiger gelernt und erfahren, wie Sie sie in der C-Programmierung verwenden. Sie haben gesehen, wie ein Nullzeiger und ein void-Zeiger deklariert werden und wie ein Nullzeiger verwendet wird, um das Ende eines Zeigerarrays zu markieren. Sie haben auch gelernt, wie ein Programm anpassen wird, um Benutzereingaben zu ermöglichen und mit Nullzeigern nach Namen zu suchen. Indem Sie Nullzeiger in Ihren Programmen verwenden, können Sie diese robuster gestalten und häufige Fehler vermeiden.