Le 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;
}
les sorties
sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
sur un système d'exploitation 32 bits, compilé avec GCC.
sizeof
calcule-t-il la longueur (l'espace nécessaire pour) le littéral de chaîne?sizeof
?sizeof("f")
doit retourner 2, un pour le 'f' et un pour le '\ 0' final.sizeof(foo)
renvoie 4 sur une machine 32 bits et 8 sur une machine 64 bits car foo est un pointeursizeof(bar)
renvoie 2 car la barre est un tableau de deux caractères, le "b" et le "\ 0" final.Le littéral de chaîne a le type 'tableau de taille N de char' où N inclut le terminal null.
N'oubliez pas que les tableaux ne se désintègrent pas aux pointeurs lorsqu'ils sont passés à sizeof
.
sizeof
renvoie la taille en octets de son opérande. Cela devrait répondre à la question numéro 1.;) De plus, un littéral de chaîne est de type "array to n const char" lorsqu'il est passé à sizeof
.
Vos cas de test, un par un:
"f"
est un littéral de chaîne composé de deux caractères, le caractère f
et le NUL final.foo
est un pointeur (modifier: indépendamment des qualificatifs) et les pointeurs semblent faire 4 octets de long sur votre système.bar
le cas est le même que "f"
.J'espère que cela pourra aider.