Maison >développement back-end >C++ >Comment imprimer des pointeurs de fonction en C à l'aide de « cout » et « printf » ?

Comment imprimer des pointeurs de fonction en C à l'aide de « cout » et « printf » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 22:33:11254parcourir

How Do I Print Function Pointers in C   Using `cout` and `printf`?

Impression de pointeurs de fonction avec cout et printf

En C , les pointeurs de fonction peuvent être imprimés en utilisant cout ou printf, mais avec un comportement différent selon le spécificateur de format utilisé.

cout Opérateur

Par défaut, cout traite les pointeurs de fonction comme des valeurs booléennes et imprime 1 pour les pointeurs non nuls et 0 pour les pointeurs nuls. Pour imprimer l'adresse réelle, elle doit être explicitement convertie en void* :

cout << (void *)pf;

Fonction printf

Lors de l'utilisation de printf avec le spécificateur de format %p, les pointeurs de fonction sont traités comme des pointeurs et leurs adresses sont imprimées en hexadécimal :

printf("%p", pf);

Pointeurs de fonction comme Booléens

Les pointeurs de fonction sont en effet traités comme des booléens en C . Cela est dû à la règle de conversion booléenne qui permet de convertir des pointeurs en bool, où un pointeur non nul est évalué comme vrai et un pointeur nul comme faux. Ce comportement peut être inattendu s'il n'est pas pris en compte.

Pointeurs de fonction membre

L'impression de pointeurs de fonction membre est plus complexe car ce ne sont pas de simples pointeurs. Cependant, il est possible d'imprimer l'adresse de la fonction membre à l'aide d'une astuce :

cout << (void *)(*(int **)&pf);

Cela profite du fait que l'adresse de la fonction membre est stockée dans le deuxième élément du pointeur de fonction, et convertit à annuler*.

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!

Déclaration:
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