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!