Maison >développement back-end >C++ >Quelle est la différence entre « sizeof » un littéral de chaîne, un « const char* const » et un « const char[] » ?
Taille du littéral de chaîne : démêler les différences
Considérez l'extrait de code suivant :
#include <iostream> using namespace std; int main() { const char* const foo = "f"; const char bar[] = "b"; cout << "sizeof(string literal) = " << sizeof("f") << endl; cout << "sizeof(const char* const) = " << sizeof(foo) << endl; cout << "sizeof(const char[]) = " << sizeof(bar) << endl; }
L'exécution de ce code révèle intrigant results :
sizeof(string literal) = 2 sizeof(const char* const) = 4 sizeof(const char[]) = 2
Comprendre les résultats
Interprétation du type littéral de chaîne
Pendant que sizeof calcule l'espace requis pour la chaîne littérale, il ne modifie pas son type sous-jacent. La chaîne littérale continue d'avoir le type « tableau de taille N de caractère const », où N représente le caractère nul de fin.
Comportement du tableau par rapport au pointeur
Il est crucial de noter que les tableaux ne se dégradent pas en pointeurs lorsqu'ils sont transmis à sizeof. Cela signifie que sizeof(bar) renvoie la taille du tableau lui-même, et non la taille d'un pointeur vers le tableau.
Conclusion
En résumé, sizeof(" f") renvoie l'espace requis pour la chaîne littérale, y compris le caractère nul. Cependant, sizeof(foo) et sizeof(bar) se comportent différemment en raison des différences de type impliquées. Comprendre ces nuances est essentiel lorsque l'on travaille avec des chaînes littérales en programmation C.
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!