Maison >développement back-end >C++ >Pourquoi l'adresse de mon membre C Char s'imprime-t-elle en blanc et pourquoi y a-t-il un décalage de 8 octets ?

Pourquoi l'adresse de mon membre C Char s'imprime-t-elle en blanc et pourquoi y a-t-il un décalage de 8 octets ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 02:51:38830parcourir

Why Does My C   Char Member's Address Print Blank, and Why Is There an 8-Byte Offset?

Bizarre de l'impression d'adresses de débogage

Dans un programme C impliquant une classe avec des membres de données int, char et chaîne, l'impression de leurs adresses soulève un sourcil. Lors de l'accès au membre char, la sortie reste mystérieusement vide. De plus, la conversion d'un membre de caractère public en un pointeur vide révèle un décalage de 8, ce qui incite à une enquête plus approfondie.

Adresse de caractère manquante :

Le problème avec l'adresse de caractère vide le résultat provient de la façon dont l’opérateur & est interprété. Par défaut, l'utilisation de & sur une variable char renvoie un pointeur vers une chaîne de style C (char). Cela provoque une surcharge << opérateur pour les flux de chaînes pour traiter la variable comme un tableau de caractères et les imprimer sous forme de chaîne, plutôt que son adresse.

Résoudre le problème :

Pour imprimer le correctement l'adresse du membre char, une conversion explicite en void* est requise. Cette conversion indique que le pointeur doit être traité comme un pointeur générique, empêchant ainsi le << opérateur de l’interpréter comme une chaîne C. Le code corrigé :

cout << "address of char   :" << (void*) &b << endl;

Alternativement, l'utilisation de static_cast est une méthode plus sûre et préférée pour lancer des pointeurs en C moderne :

cout << "address of char   :" << static_cast( &b ) << endl;

Décalage de 8 dans les membres publics :

Lorsque les membres int, char et string sont publics, le décalage entre les adresses des membres char et string est toujours 8. En effet, dans une classe publique, les variables membres sont disposées dans la structure de classe dans l'ordre dans lequel elles sont déclarées. Par conséquent, le membre chaîne suit le membre char avec un décalage fixe de 8 octets.

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