Maison > développement back-end > C++ > Comment `sizeof` gère-t-il différemment les littéraux de chaîne, les tableaux et les pointeurs en C ?

Comment `sizeof` gère-t-il différemment les littéraux de chaîne, les tableaux et les pointeurs en C ?

Linda Hamilton
Libérer: 2024-12-07 09:03:13
original
154 Les gens l'ont consulté

How Does `sizeof` Differently Handle String Literals, Arrays, and Pointers in C  ?

Taille du littéral de chaîne : comprendre l'empreinte mémoire des constantes de chaîne

En C, les littéraux de chaîne font partie intégrante du code, représentant des séquences fixes de personnages. L'opérateur sizeof joue un rôle crucial dans la compréhension de l'allocation de mémoire et de la disposition de ces littéraux de chaîne.

Question 1 : Pourquoi sizeof calcule-t-il la longueur d'un littéral de chaîne ?

Lorsqu'il est appliqué à une chaîne littérale, telle que "f", l'opérateur sizeof mesure le nombre de caractères stockés dans le littéral, y compris le caractère nul de fin (' '). Dans le cas de "f", il calcule l'espace requis pour stocker deux caractères, car il inclut à la fois le "f" et le terminateur nul.

Question 2 : le littéral de chaîne a-t-il un sens différent Type quand donné à sizeof ?

Les littéraux de chaîne ont un type distinct : un tableau de caractères avec une taille connue, où la taille inclut le terminateur nul. Ce type diffère de char* (pointeur vers un caractère) et char[] (tableau de caractères). Lorsqu'il est transmis à sizeof, le type de tableau du littéral de chaîne est conservé, ce qui conduit à un résultat qui reflète la taille du tableau plutôt que la taille d'un pointeur.

Pourquoi sizeof renvoie-t-il des valeurs différentes pour les littéraux de chaîne , tableaux et pointeurs ?

  • sizeof("f") : renvoie 2, car il mesure la taille du tableau de caractères contenant 'f' et ' '.
  • sizeof(foo) : renvoie 4 (sur les systèmes 32 bits) ou 8 (sur les systèmes 64 bits), car il mesure la taille de la variable de pointeur foo qui contient l'adresse de la chaîne littérale.
  • sizeof(bar) : renvoie 2, car il mesure la taille du tableau de caractères contenant 'b' et ' '.

Rappelez-vous :

  • Les littéraux de chaîne ont le type : tableau de taille N de caractère const (où N inclut le terminateur nul) .
  • Les tableaux ne se désintègrent pas en pointeurs lorsqu'ils sont transmis à sizeof.

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