Pointeurs de fonction en c

Pointeurs de fonction en c
Les pointeurs sont une caractéristique clé du langage de programmation C offrant le contrôle direct du programmeur de la mémoire utilisée dans le programme. Les fonctions sont une technique et une syntaxe communes en programmation C pour créer des blocs de code réutilisables et les appeler dans différentes situations. Ce didacticiel d'indice Linux décrit les pointeurs de fonction dans le langage de programmation C.

Un pointeur de fonction est une variable de pointeur C normale, mais ce qu'il pointe est une fonction. Cela permet des programmes sophistiqués et dynamiques qui appellent différentes fonctions dans différentes circonstances en fonction de la fonction de la fonction que le pointeur pointe à ce moment-là. Le programmeur crée une logique pour modifier la valeur du pointeur vers diverses fonctions pour différentes raisons, et les appels qui jamais fonctionnent sont indiqués par le pointeur. Permet de démontrer cela avec quelques exemples.

Aperçu technique

Nous couvrirons la syntaxe des pointeurs de fonction. Cela nous fera savoir comment nous pouvons faire pointer le pointeur une fonction; En d'autres termes, comment nous pouvons stocker l'adresse de la fonction à l'aide du pointeur. Nous apprendrons également la déclaration et la référence du pointeur de fonction et comment les pointeurs de fonction peuvent être utilisés pour faire des appels de fonction pour la fonction du pointeur.

Syntaxe

La syntaxe générale pour la déclaration du pointeur de fonction est la suivante:

$ Return type de fonction (* nom du pointeur) (type de données ar_1, type de données arg_2)

La méthode de déclaration du pointeur de fonction est la même que la déclaration de fonction habituelle; La seule différence dans le pointeur de fonction est lorsque nous déclarons le nom du pointeur de fonction, nous utilisons le symbole * et la variable est incluse dans la parenthèse, contrairement à la fonction normale où le nom est déclaré sans utiliser de symbole avec. Déclarons un pointeur de fonction factice à l'aide d'un exemple hypothétique; Tout d'abord, déclarez toute fonction avec la méthode habituelle, e.g., int func (int, int). Après la déclaration de fonction func, Nous allons maintenant déclarer un pointeur de fonction comme int (* funcptr) (int, int);. Voici la syntaxe générale et l'attribution d'une fonction à un pointeur de fonction:

// Déclaration de fonction
int func (int, int);
// Déclaration de pointeur de fonction
int (* funcptr) (int, int);
// Affectation du pointeur de fonction
funcptr = func;

Exemple # 01

Dans cet exemple, nous créerons une fonction appelée carré avec 2 paramètres pour Len et le calcul de la largeur d'un rectangle. [Len * largeur = zone]. Nous déclarons ensuite un pointeur de fonction et attribuons l'adresse du carré fonction au pointeur de fonction appelé sp. Après avoir reçu des entrées utilisateur dynamiques, nous appelons la fonction en utilisant le pointeur de fonction pour faire l'exécution de l'appel de fonction.

Dans le corps de la fonction, nous prendrons simplement la multiplication des deux variables Len et largeur Pour calculer le zone du rectangle et sortez de la fonction renvoyant cette zone. La mise en œuvre des exemples est indiquée dans l'extrait suivant:

#inclure
int square (int len, int largeur)
INT Area = Len * Largeur;
zone de retour;

int main()
Int L, W, région;
int (* sp) (int, int);
printf ("Entrer la longueur et la largeur d'un rectangle:");
scanf ("% d% d", & l, & w);
// attribuer le pointeur de la fonction à la fonction
sp = carré;
// Pointer de la fonction d'appel
zone = (* sp) (l, w);
printf ("zone de rectangle =% d \ n", zone);
retour 0;
Linuxhint @: ~ $ ./ func
Entrez la longueur et la largeur d'un rectangle: 10 4
Zone du rectangle = 40
Linuxhint @: ~ $

Nous avons donné la même entrée utilisateur pour les variables L et W comme «5» car elles représentent toutes deux la longueur et la largeur du carré, qui sont en valeur égale. La sortie a renvoyé le carré de valeur 5 comme zone du carré.

Exemple # 02

À l'aide de cet exemple, nous créerons un tableau de pointeurs de fonction où chaque élément du tableau stockera la fonction du pointeur pour différentes fonctions. Par exemple, nous déclarerons les deux fonctions normales de soustraction et d'addition avec le type de retour entier avec deux paramètres de fonction ayant le type de données entier. Ensuite, nous déclarerons un tableau de pointeurs de fonction, puis initialiserons les deux membres du tableau avec nos deux fonctions déclarées pour l'ajout et la soustraction. Ensuite, nous utiliserons le tableau de la fonction du pointeur avec l'index du pointeur de fonction du tableau, E.g., "Arr [i]".

Les fonctions d'addition et de soustraction utiliseront les valeurs de lecture des variables initialisées un et b. Nous afficherons ensuite ces résultats en appelant la méthode printf (). L'extrait suivant montre le programme complet de cet exemple:

#inclure
int ajout (int a, int b)
retourner a + b;
int soustraction (int a, int b)
retourner a - b;
int main()
int a, b;
int (* fonction [2]) (int, int);
fonction [0] = addition;
fonction [1] = soustraction;
printf ("Entrez deux valeurs:");
scanf ("% d% d", & a, & b);
Int result = (* fonction [0]) (a, b);
printf ("ajout (a + b) =% d \ n", résultat);
result = (* function [1]) (a, b);
printf ("soustraction (a-b) =% d \ n", résultat);
retour 0;
Linuxhint @: ~ $ ./ func
Entrez deux valeurs: 33
11
Addition (a + b) = 44
Soustraction (a-b) = 22
Linuxhint @: ~ $

Conclusion

Le guide contient un exemple de base et une explication des pointeurs de fonction dans la langue C. Remarque pour modifier la syntaxe lorsque vous modifiez la quantité de paramètre et le type de données ainsi que si vous modifiez le type de retour de la fonction que le pointeur de fonction devra changer respectivement.