Maison > développement back-end > C++ > Pourquoi « sizeof » produit-il des résultats différents pour les littéraux de chaîne, les pointeurs et les tableaux de caractères ?

Pourquoi « sizeof » produit-il des résultats différents pour les littéraux de chaîne, les pointeurs et les tableaux de caractères ?

Mary-Kate Olsen
Libérer: 2024-12-01 06:28:15
original
818 Les gens l'ont consulté

Why Does `sizeof` Produce Different Results for String Literals, Pointers, and Character Arrays?

Taille des littéraux de chaîne

Le code donné démontre l'utilisation de l'opérateur sizeof sur différents types de constantes de chaîne. Le résultat révèle que la taille d'une chaîne littérale, sizeof("f"), est différente de la taille d'un pointeur vers une chaîne littérale (sizeof(foo)), ainsi que de la taille d'un tableau de caractères (sizeof(bar )).

Pourquoi sizeof calcule-t-il la longueur d'une chaîne littérale ?

L'opérateur sizeof calcule la taille de son opérande en octets. Pour une chaîne littérale, l'opérande est la représentation de tableau de caractères correspondante, y compris le caractère nul de fin (' '). Cela explique la sortie de 2 pour sizeof("f"), car elle prend en compte les caractères 'f' et ' '.

La chaîne littérale a-t-elle un type différent lorsqu'elle est donnée à sizeof ?

Non. Une chaîne littérale a le type const char[N], où N est la longueur de la chaîne, y compris le caractère nul de fin. Cependant, lors du passage d'une chaîne littérale à l'opérateur sizeof, il traite la chaîne comme une expression de type const char*, qui est le type de pointeurs vers des caractères. Cela explique la sortie de 4 pour sizeof(foo), car il s'agit de la taille d'un pointeur sur une machine 32 bits.

Points supplémentaires :

  • Les tableaux ne se dégradent pas en pointeurs lorsqu'ils sont transmis à sizeof. Cela explique la sortie de 2 pour sizeof(bar), car bar est un tableau de caractères constant.
  • Le type de l'argument littéral de chaîne de sizeof influence le résultat. Par exemple, sizeof("foo" 1) renverrait 4 sur les machines 32 bits et 64 bits car l'opérande est une expression de type const char*.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal