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!