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

Comment puis-je imprimer correctement des pointeurs de fonction en C à l'aide de « cout » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 02:07:09460parcourir

How Can I Correctly Print Function Pointers in C   using `cout`?

Impression de pointeurs de fonction avec cout

En C, l'impression de pointeurs de fonction directement à l'aide de cout peut être problématique. Au lieu de cela, il est conseillé de convertir le pointeur de fonction en void* avant de l'imprimer. Ceci est démontré dans l'extrait de code suivant :

#include <iostream>
using namespace std;

int foo() {return 0;}

int main()
{
    int (*pf)();
    pf = foo;
    cout << "cout << pf is " << pf << endl;
    cout << "cout << (void *)pf is " << (void *)pf << endl;
    printf("printf(\"%p\", pf) is %p\n", pf);
    return 0;
}

Sortie :

cout << pf is 1  
cout << (void *)pf is 0x100000b0c  
printf("%p", pf) is 0x100000b0c

Comme vu ci-dessus, cout convertit implicitement le pointeur de fonction en bool, ce qui donne la sortie 1. Pour imprimer l'adresse réelle de la fonction, elle doit être convertie en void*.

Les pointeurs de fonction de type void* peuvent être imprimés directement en utilisant cout. En effet, void* est un type de pointeur générique qui peut contenir l'adresse de n'importe quel type, y compris les pointeurs de fonction.

Observation des pointeurs de fonction membre

Impression des pointeurs de fonction membre à l'aide void* ne fonctionne pas en raison de leur structure plus complexe. Cependant, selon la norme C, les valeurs r des pointeurs de fonction peuvent être converties en bool.

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