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