Pointeur sur une fonction

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 sur une fonction est un moyen de stocker l'adresse mémoire d'une fonction tout comme une variable stocke l'adresse mémoire d'une valeur. Lorsqu'une fonction est appelée à travers un pointeur, on parle de pointeur sur une fonction.

Dans ce laboratoire, nous allons écrire un programme C pour démontrer comment utiliser un pointeur sur une fonction.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/FileHandlingGroup(["File Handling"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FileHandlingGroup -.-> c/write_to_files("Write To Files") c/FileHandlingGroup -.-> c/create_files("Create Files") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/pointers -.-> lab-123303{{"Pointeur sur une fonction"}} c/memory_address -.-> lab-123303{{"Pointeur sur une fonction"}} c/function_declaration -.-> lab-123303{{"Pointeur sur une fonction"}} c/function_parameters -.-> lab-123303{{"Pointeur sur une fonction"}} c/write_to_files -.-> lab-123303{{"Pointeur sur une fonction"}} c/create_files -.-> lab-123303{{"Pointeur sur une fonction"}} c/output -.-> lab-123303{{"Pointeur sur une fonction"}} end

Déclarer et définir la fonction à pointer

Dans cette étape, nous allons déclarer et définir une fonction qui prend deux arguments entiers et ne renvoie rien.

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

Déclarer un pointeur sur une fonction

Dans cette étape, nous allons déclarer un pointeur sur la fonction créée à l'étape 1. La syntaxe pour déclarer un pointeur sur une fonction est similaire à celle pour déclarer un pointeur sur une variable, mais elle spécifie les types de paramètres et le type de retour de la fonction sur laquelle on pointe.

// pointeur sur fonction
void (*fptr)(int, int);

Stocker l'adresse de la fonction dans le pointeur

Dans cette étape, nous allons stocker l'adresse de la fonction créée à l'étape 1 dans le pointeur créé à l'étape 2.

// assigner l'adresse au pointeur sur fonction
fptr = func;

Appeler la fonction à l'aide du pointeur

Dans cette étape, nous allons appeler la fonction que nous avons créée à l'étape 1 à l'aide du pointeur sur la fonction créée à l'étape 2.

// appel de fonction
func(2,3);
fptr(2,3);  // appel d'une fonction en se référant au pointeur sur une fonction

Écrire le code complet

Ouvrez le fichier main.c dans le répertoire ~/project/.

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

int main()
{
    printf("\n\n\t\tLabEx - Meilleur endroit pour apprendre\n\n\n");

    // pointeur sur fonction
    void (*fptr)(int, int);

    // assigner l'adresse au pointeur sur fonction
    fptr = func;

    // appel de fonction
    func(2,3);
    fptr(2,3);  // appel d'une fonction en se référant au pointeur sur une fonction

    printf("\n\n\t\t\tCoder est amusant!\n\n\n");
    return 0;
}

Compiler et exécuter le code

Pour compiler le code, ouvrez le terminal et tapez la commande suivante :

gcc main.c -o main

Pour exécuter le programme, tapez la commande suivante :

./main

Sommaire

Dans ce laboratoire, nous avons appris à utiliser un pointeur sur une fonction dans un programme C. Nous avons vu comment déclarer et définir la fonction à pointer, comment déclarer un pointeur sur une fonction, comment stocker l'adresse de la fonction dans le pointeur et comment appeler la fonction à l'aide du pointeur. L'utilisation de pointeurs sur des fonctions peut faciliter la rédaction et la compréhension de programmes complexes.