Taille du pointeur de variable dans une structure
int main()
{
struct
{
char *name_pointer;
char all[13];
int foo;
} record;
printf("%d\n",sizeof(record.all));
printf("%d\n",sizeof(record.foo));
printf("%d\n",sizeof(record));
return 0;
}
Je veux la taille du pointeur de la vatiable "*name_pointer" dans la structure....
- lire: Ce n'
sizeof(&arr)
de retour? pour connaître les différences entrename_pointer
etall
. - sizof(char*); vous dirais
- sizeof(record.name_pointer);
- vous souhaitez
sizeof(record.name_pointer)
oustrlen(record.name_pointer)
? - ce qui vous a empêché de sizeof(record.name_pointer);
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la taille du pointeur de la souris utilisation
Votre peut obtenir de 2, 4, 6, 8, etc.
Pour obtenir la taille de la donnée qui est pointé par le pointeur (une
char
) utilisationVous devriez obtenir 1.
Pour obtenir la longueur de la chaîne la chaîne pointée par le pointeur, en supposant
record.name_pointer
points de légitime des données, l'utilisationBTW Comme @alk dit et pourquoi le
(int)
casting ci-dessus, un indicateur de conversion à utiliser avecsizeof()
comprend le 'z' préfixe. Le résultat desizeof()
etstrlen()
est de typesize_t
. Bien quesize_t
etint
sont souvent les mêmes, il existe de nombreux systèmes où ils sont de tailles différentes. Et depuis sizeof() est un "unsigned integer" (C11 6.5.3.4), je recommandestrlen()
retournesize_t
le spécificateur de conversion doit être préfixé par le modificateur de longueurz
pour devenirzd
.char *
, afin qu'il pointe vers exactement un personnage. Donc tout va bien.record.name_pointer
est un pointeur vers unechar
, donc la sizeof(*enregistrer.name_pointer) sera 1. Comme une chaîne de caractères en C est une longueur variable de tableau de caractères et de la chaîne de valeur est transmise par l'adresse de la premièrechar
, sirecord.name_pointer
est utilisé à 1char
, une chaîne, ou un fixe char tableau est indiscernable de l'OP de l'extrait de code.Pointeur de variable sera toujours(32 bits à architecture du système) de taille 4.
si vous avez 64 bits architecture du système, il est de 8.
always
ajouterin your system
Je crois que c'est une BONNE idée d'utiliser des types de données dans sizeof plutôt que sur des variables de types de données natifs. donc, utiliser: