27 votes

Que signifie struct_type[1] ?

J'ai trouvé un code qui obtient la taille d'une structure comme ceci :

sizeof(struct struct_type[1]);

J'ai testé et il retourne la taille de struct_type .

Et

sizeof(struct struct_type[2]);

retourne deux fois la taille de la structure.

Edit :

struct_type est un struct, pas un tableau :

struct struct_type {
    int a;
    int b;
};

Qu'est-ce que struct_type[1] signifie réellement ?

24voto

Serhio Points 1

Souvenez-vous de sizeof la syntaxe :

sizeof ( typename );

Ici, typename est struct struct_type[N] ou sous une forme plus lisible struct struct_type [N] qui est un tableau de N objets de type struct_type. Comme vous le savez, la taille d'un tableau est la taille d'un élément multipliée par le nombre total d'éléments.

13voto

sps Points 2257

Tout comme :

sizeof(int[1]); // will return the size of 1 int

et

sizeof(int[2]); // will return the size of 2 ints

C'est le cas :

sizeof(struct struct_type[1]); // return size of 1 `struct struct_type'

et

sizeof(struct struct_type[2]); // return size of 2 `struct struct_type'

Ici struct struct_type[1] et struct struct_type[2] représentent simplement arrays d'éléments de type struct struct_type et sizeof ne fait que retourner la taille de ces tableaux représentés.

7voto

haccks Points 33022

Pour la déclaration

int arr[10];

la taille du tableau peut être calculée soit en utilisant arr comme opérande ou int [10] . Puisque sizeof L'opérateur donne la taille en fonction du type d'opérande. sizeof(arr) et sizeof (int [10]) retournera la taille du tableau arr (en définitive arr est de type int [10] ).

C11-§6.5.3.3/2 :

L'opérateur sizeof donne la taille (en octets) de son opérande, qui peut être une expression ou le nom entre parenthèses d'un type. expression ou le nom entre parenthèses d'un type. La taille est déterminée à partir du type de l'opérande. . Le résultat est un nombre entier. Si le type de l'opérande est un type de tableau de longueur variable, l'opérande est évalué ; sinon, l'opérande n'est pas évalué et le résultat est une constante entière.

De même, pour un tableau de struct struct_type

struct struct_type a[1];

peut être calculée soit par sizeof (a) ou sizeof(struct struct_type[1]) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X