Maison > développement back-end > C++ > Pourquoi mon code C affiche-t-il une adresse vide pour un membre « char » et une différence d'adresse de 8 octets entre les membres « int » et « string » ?

Pourquoi mon code C affiche-t-il une adresse vide pour un membre « char » et une différence d'adresse de 8 octets entre les membres « int » et « string » ?

DDD
Libérer: 2024-12-30 02:38:09
original
967 Les gens l'ont consulté

Why Does My C   Code Show an Empty Address for a `char` Member and an 8-Byte Address Difference Between `int` and `string` Members?

Adresse de la divergence d'affichage des données de personnage

Dans le code C fourni, la sortie des adresses des membres de la classe présente une anomalie : l'adresse de le membre de données char "b" est affiché sous la forme d'un espace vide.

La raison de ce comportement réside dans la façon dont l'opérateur d'adresse de et l'insertion opérateur "<<" interpréter le type de caractère. Lorsque l'adresse de "b" est obtenue, il en résulte un pointeur char *. L'opérateur d'insertion, cependant, interprète cela comme une chaîne de style C et tente d'imprimer son contenu plutôt que son adresse.

Pour remédier à cela, l'adresse "b" peut être convertie en un pointeur vide en utilisant soit une distribution de style C comme "(void ) &b" ou, de préférence, une alternative plus sûre comme "static_cast(&b)". Cela garantit que l'adresse de "b" est imprimée correctement.

Mystère de la différence d'adresse (chaîne et caractère)

Une autre observation est que lorsque les membres de la classe int , char et string sont déclarés publics, l'adresse de "char" est affichée sous forme de chaîne vide, tandis que la différence entre l'adresse de "string" et celle de "int" est toujours de 8 (et non 9).

Cette différence vient de la manière dont les objets sont stockés en mémoire. Le type de données chaîne est implémenté sous la forme d'un bloc contigu de caractères, comprenant un caractère nul de fin. Ce caractère nul ajoute effectivement un octet supplémentaire à la taille de la chaîne.

Par conséquent, la différence entre l'adresse de "string" et "int" est de 8 octets, représentant la taille du type de données chaîne plus un pour le terminateur nul. En revanche, le type de données char n'a pas de terminateur nul, ce qui entraîne un affichage vide lorsque son adresse est imprimé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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal