taille du tableau de caractères et taille du pointeur de caractère
J'ai un morceau de code C et je ne comprends pas comment les sizeof(...)
fonction:
#include <stdio.h>
int main(){
const char firstname[] = "bobby";
const char* lastname = "eraserhead";
printf("%lu\n", sizeof(firstname) + sizeof(lastname));
return 0;
}
Dans le code ci-dessus sizeof(prénom) est de 6 et sizeof(nom) est de 8.
Mais bobby
est de 5 caractères de large et eraserhead
est 11 de large. J'attends 16
.
Pourquoi sizeof se comporter différemment pour le tableau de caractères, et un pointeur de caractère?
Quelqu'un peut-il préciser?
source d'informationauteur user2416871
Vous devez vous connecter pour publier un commentaire.
firstname
est unchar
tableau portant une fuite0
-terminator.lastname
est un pointeur. Sur un système 64 bits, les pointeurs sont de 8 octets de large.sizeof
un tableau est la taille du tableau, dans le cas de "bobby", il est à 5 caractères et un trailing\0
qui est égal à 6.sizeof
un pointeur est la taille du pointeur, qui est normalement de 4 octets dans la machine 32 bits et 8 octets en machine 64 bits.La taille de votre premier tableau est la taille de
bobby\0
.\0
est le caractère de fin, de sorte qu'il est de 6.Le second est la taille de la taille d'un pointeur, qui est de 8 octets dans votre système 64 bits. Sa taille n'a pas d'dépend du longueur de la chaîne.
firstname[]
est null, ce qui ajoute 1 à la longueur.sizeof(lastname)
est de donner la taille de la pointeur au lieu de la valeur réelle.firstname
est un tableau de 6chars
y compris la résiliation de'\0'
de caractère à la fin de la chaîne. C'est pourquoisizeof firstname
est 6.lastname
est un pointeur verschar
et quelque soit la taille d'un pointeur sur votre système. Les valeurs typiques sont 4 et 8. La taille delastname
sera le même, peu importe ce qu'il désigne (ou même s'il pointe vers rien du tout).