En C, comme les pointeurs de données ordinaires (int*, char*, etc.), vous pouvez également déclarer des pointeurs vers des fonctions, c'est-à-dire des pointeurs de fonction. Alors comment le déclarer ? L'article suivant vous montrera comment déclarer des pointeurs de fonction. J'espère qu'il vous sera utile. [Recommandation tutoriel vidéo : Tutoriel Langage C]
Comment déclarer un pointeur vers une fonction ?
On comprend d'abord comment créer un pointeur vers un entier en C ?
int * ptrInteger; / *我们在int和ptrInteger之间放置了一个*运算符来创建指针。* /
Le ptrInteger ici est un pointeur vers un entier. Si cela peut être compris, alors logiquement nous ne devrions avoir aucun problème à déclarer des pointeurs vers des fonctions.
Voyons ensuite comment déclarer une fonction ? Par exemple :
int foo(int);
où foo est une fonction qui renvoie et accepte un paramètre de type int. Par conséquent, logiquement, on pourrait penser que le simple fait de placer un opérateur * entre int et foo(int) devrait créer un pointeur vers une fonction, c'est-à-dire :
int * foo(int);
Cependant, ce n'est pas correct, car la priorité des opérateurs c ; entre également en jeu ici, l'opérateur () aura priorité sur l'opérateur *. La déclaration ci-dessus signifie : une fonction foo, l'un des paramètres est de type int et la valeur de retour est int*, qui est un pointeur entier ; ce n'est pas ce que nous voulons, nous devons donc également considérer la priorité de l'opérateur c ;
Nous devons donc lier l'opérateur * avec foo d'une manière ou d'une autre. Pour ce faire, nous utiliserons l'opérateur () pour modifier la priorité par défaut des opérateurs C. Exemple :
int (*foo)(int);
* L'opérateur est utilisé avec foo, et foo est le nom de la fonction, déclarant ainsi un pointeur vers la fonction.
Exemple d'utilisation du pointeur de fonction :
#include <stdio.h> // 具有int参数和void返回类型的普通函数 void fun(int a) { printf("a值为: %d\n", a); } int main() { // fun_ptr 是指向函数fun()的指针 void (*fun_ptr)(int) = &fun; /* 相当于下面两行 void (*fun_ptr)(int); fun_ptr = &fun; */ //使用fun_ptr调用fun() (*fun_ptr)(10); return 0; }
Sortie :
Explication :
1. Contrairement aux pointeurs ordinaires, les pointeurs de fonction pointent vers du code, pas vers des données. Généralement, un pointeur de fonction stocke le début du code exécutable.
2. Contrairement aux pointeurs ordinaires, nous n'utilisons pas de pointeurs de fonction pour allouer et libérer de la mémoire.
3. Dans les pointeurs de fonction, le nom de la fonction peut également être utilisé pour obtenir l'adresse de la fonction.
4. Comme les pointeurs de données ordinaires, les pointeurs de fonction peuvent être transmis en tant que paramètres ou renvoyés par des fonctions.
Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!