Maison > développement back-end > Tutoriel C#.Net > Comment déclarer un pointeur pour fonctionner en C ?

Comment déclarer un pointeur pour fonctionner en C ?

青灯夜游
Libérer: 2019-03-11 11:32:17
original
4836 Les gens l'ont consulté

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 pour fonctionner en 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之间放置了一个*运算符来创建指针。* /
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

* 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; 
}
Copier après la connexion

Sortie :

Comment déclarer un pointeur pour fonctionner en C ?

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal