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 ?

Pourquoi `cout` imprime-t-il le caractère au lieu de l'adresse lorsque vous travaillez avec des pointeurs char ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 04:52:02624parcourir

Why does `cout` print the character instead of the address when working with char pointers?

Comprendre l'impression de pointeurs de caractères avec cout

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.

Résoudre le dilemme d'impression

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!

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