Pointeurs de fonctions en C ++

Quand une application est en cours d'exécution, les fonctions de l'application exister dans la mémoire- donc comme tout le reste dans la mémoire, ils ont une adresse. Et avoir une adresse est bonne, car de cette manière, les gens peuvent vous trouver.

Vous pouvez prendre l'adresse d'une fonction en prenant le nom de celui-ci et de mettre le adresse de opérateur () Devant le nom de la fonction, comme ceci:

Adresse = Ma fonction-

Mais pour faire ce travail, vous devez savoir quel type de déclarer adresse. La adresse variable est un pointeur vers une fonction, et la façon la plus propre pour attribuer un type est d'utiliser un typedef. (Heureusement, ceci est un moment où la plupart des gens sont prêts à utiliser un typedef.)

Voici la typedef, Crois le ou pas:

typedef int (* FunctionPtr) (int) -



Il est difficile à suivre, mais le nom du nouveau type est FunctionPtr. Ceci définit un type appelé FunctionPtr qui renvoie un entier (le plus à gauche int) Et prend un entier comme un paramètre (le plus à droite int, qui doit être entre parenthèses).

La partie centrale de cette déclaration est le nom du nouveau type, et vous devez le faire précéder par un astérisque, ce qui signifie qu'il est un pointeur vers tout le reste de l'expression. En outre, vous devez mettre le nom du type et de sa astérisque précédente entre parenthèses.

Et puis vous êtes prêt à déclarer certaines variables! Voici:

Adresse FunctionPtr = Ma fonction-

Cette ligne déclare adresse comme un pointeur vers une fonction et est initialisée à Ma fonction(). Maintenant, pour que cela fonctionne, le code de Ma fonction() doivent avoir le même dans le prototype déclaré typedef: Dans ce cas, il doit prendre un entier comme paramètre et retourner un entier.

Ainsi, par exemple, vous pouvez avoir une fonction comme ceci:

int TheSecretNumber (int x) {return x + 1-}

Ensuite, vous pourriez avoir une main () qui stocke l'adresse de cette fonction dans une variable - et appelle ensuite la fonction en utilisant la variable:

int main (int argc, char * argv []) {typedef int (* FunctionPtr) (int) d'adresse -int MyPasscode = 20 = FunctionPtr TheSecretNumber-cout lt; lt; Adresse (MyPasscode) lt; lt; endl-}

Maintenant, juste pour que vous pouvez dire que vous l'avez vu, voici ce que le adresse déclaration ressemblerait sans en utilisant un typedef:

int (* Adresse) (int) = TheSecretNumber-

Le cadeau devrait être que vous avez deux choses entre parenthèses à côté, et le jeu sur la droite a seulement types à l'intérieur. L'un sur la gauche a un nom variable. Donc, cette ligne ne déclare pas un type- plutôt, il est déclarer une variable.


» » » » Pointeurs de fonctions en C ++