Das Verwenden von Nullzeigern in der C-Programmierung

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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 ist ein Zeiger, der keinen spezifischen Typ hat. Er kann verwendet werden, um beliebige Datentypen zu speichern. Um einen void-Zeiger zu deklarieren, verwenden Sie das Schlüsselwort void vor dem Sternchen (*).

#include <stdio.h>

int main() {
   void *ptr;    // ptr ist ein void-Zeiger
   return 0;
}

Verwenden eines Nullzeigers, 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.