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 ?
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!