Utilisation d'un pointeur nul en programmation C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.c vous-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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/CompoundTypesGroup -.-> c/strings("Strings") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/UserInteractionGroup -.-> c/user_input("User Input") subgraph Lab Skills c/variables -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/for_loop -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/arrays -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/strings -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/pointers -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/memory_address -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} c/user_input -.-> lab-123293{{"Utilisation d'un pointeur nul en programmation C"}} end

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 stocker n'importe quel type de données. Pour déclarer un pointeur void, utilisez le mot-clé void avant l'astérisque (*).

#include <stdio.h>

int main() {
   void *ptr;    // ptr est un pointeur void
   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écapitulatif

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.