Maison > Article > développement back-end > Pourquoi `cout` imprime-t-il le caractère au lieu de l'adresse lorsque vous travaillez avec des pointeurs char ?
Lorsque vous traitez des pointeurs de caractères, il est crucial de comprendre comment ils sont gérés dans différents environnements. Alors que print() avec les spécificateurs de conversion %u et %s donne le contrôle sur l'impression des adresses ou des chaînes, le défi se pose lors de l'utilisation de cout.
Considérez l'extrait de code suivant :
<code class="cpp">char ch = 'a'; char *cptr = &ch; cout << cptr << endl;
Ici, la sortie souhaitée est l'adresse de ch stockée dans cptr. Cependant, par défaut, cout aura tendance à traiter cptr comme une chaîne normale et à imprimer le caractère « a » au lieu de son adresse.
Pour remédier à ce problème, nous devons pour forcer cout à interpréter cptr comme un pointeur vide plutôt que comme un pointeur char. Cela nous permet d'exploiter l'opérateur ostream& qui gère spécifiquement les pointeurs vides et imprime leurs adresses.
Pour y parvenir, nous pouvons utiliser un cast comme suit :
<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
En convertissant cptr en un pointeur vide, la résolution de surcharge sélectionne le bon opérateur, ce qui entraîne l'impression de l'adresse souhaitée.
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!