Introduction
Un pointeur nul est un pointeur qui ne pointe vers aucune adresse mémoire. En programmation C, un pointeur nul est représenté par la constante NULL, qui est définie dans le fichier d'en-tête stdio.h. L'utilisation d'un pointeur nul peut aider à éviter les erreurs et à ajouter des fonctionnalités aux programmes C.
Dans ce laboratoire, vous allez apprendre à connaître les pointeurs nuls et à les utiliser en programmation C. Vous allez créer un programme qui utilise des pointeurs nuls pour rechercher des noms dans un tableau.
Note : Vous devez créer le fichier
~/project/main.cvous-même pour pratiquer la programmation et apprendre à le compiler et à l'exécuter à l'aide de gcc.
cd ~/project
## créer main.c
touch main.c
## compiler main.c
gcc main.c -o main
## exécuter main
./main
Décarer un pointeur nul
En programmation C, un pointeur nul est un pointeur qui ne pointe vers rien. Pour déclarer un pointeur nul, vous pouvez assigner la valeur NULL à une variable pointeur.
#include <stdio.h>
int main() {
int *ptr = NULL; // ptr est un pointeur nul
return 0;
}
Déclarer un pointeur void
Un pointeur void est un pointeur qui n'a pas de type spécifique. Il peut être utilisé pour pointer vers n'importe quel type de données. Pour déclarer un pointeur void, utilisez le mot-clé void avant l'astérisque (*).
Un pointeur void doit être converti (casté) vers un autre type de données avant de pouvoir être déréférencé ou utilisé pour l'arithmétique de pointeurs.
#include <stdio.h>
int main() {
int n = 10;
void *ptr = &n; // ptr est un pointeur void pointant vers un int
printf("Value of n: %d\n", *(int*)ptr); // conversion en pointeur int avant déréférencement
return 0;
}
Utiliser un pointeur nul pour marquer la fin d'un tableau de pointeurs
Vous pouvez utiliser un pointeur nul pour marquer la fin d'un tableau de pointeurs en programmation C. Cela peut être utile lors de la recherche de noms ou d'autres données dans le tableau.
#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 est dans la liste.\n");
}
if(search(names, "Scarlett") == -1)
{
printf("Scarlett non trouvée.\n");
}
return 0;
}
// définir la fonction de recherche
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // nom non trouvé
}
Personnaliser le programme pour la saisie utilisateur
Vous pouvez personnaliser le programme pour permettre à l'utilisateur d'entrer des noms pour le tableau et de chercher des noms. Cela peut être fait à l'aide de la fonction scanf() en programmation C.
#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("Entrez des noms (appuyez sur Entrée pour arrêter) :\n");
// obtenir des noms à partir de l'entrée utilisateur
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; // marquer la fin du tableau avec un pointeur nul
// chercher des noms
while(1)
{
printf("Entrez le nom à rechercher (appuyez sur Entrée pour arrêter) :\n");
scanf("%s", name);
if(strcmp(name, "") == 0)
{
break;
}
int index = search(names, name);
if(index!= -1)
{
printf("%s est trouvé à l'index %d.\n", name, index);
}
else
{
printf("%s non trouvé.\n", name);
}
}
return 0;
}
// définir la fonction de recherche
int search(char *ptr[], char*name)
{
for(int i=0; ptr[i]; ++i)
{
if(!strcmp(ptr[i], name))
{
return i;
}
}
return -1; // nom non trouvé
}
Résumé
Dans ce laboratoire, vous avez appris à connaître les pointeurs nuls et à les utiliser en programmation C. Vous avez vu comment déclarer un pointeur nul et un pointeur void, et comment utiliser un pointeur nul pour marquer la fin d'un tableau de pointeurs. Vous avez également appris à personnaliser un programme pour permettre l'entrée utilisateur et la recherche de noms à l'aide de pointeurs nuls. En utilisant des pointeurs nuls dans vos programmes, vous pouvez les rendre plus robustes et éviter les erreurs courantes.



