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.cselbst 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.



