sizeof operator
Détermine la taille de l'objet ou du type.
Utilisé lorsque la taille réelle de l'objet doit être connue.
Table des matières |
Syntaxe
sizeof(
type
)
|
(1) | ||||||||
sizeof
expression
|
(2) | ||||||||
Les deux versions renvoient une valeur de type size_t .
Explication
Notes
Selon l'architecture de l'ordinateur, un byte peut être composé de 8 bits ou plus, le nombre exact étant fourni par CHAR_BIT .
sizeof ( char ) , sizeof ( signed char ) et sizeof ( unsigned char ) retournent toujours 1 .
sizeof ne peut pas être utilisé avec des types de fonction, des types incomplets (y compris void ), ou des champs de bits lvalues.
Lorsqu'il est appliqué à un opérande qui a un type structure ou union , le résultat est le nombre total d'octets dans un tel objet, incluant le remplissage interne et final. Le remplissage final est tel que si l'objet était un élément d'un tableau, l'exigence d'alignement du prochain élément de ce tableau serait satisfaite, en d'autres termes, sizeof ( T ) renvoie la taille d'un élément d'un tableau T [ ] .
|
Si
type
est un type
VLA
et que la modification de la valeur de son
expression de taille n'affecterait pas le résultat de
|
(depuis C99) |
Sauf si le type de
expression
est un
VLA
,
(depuis C99)
expression
n'est pas évaluée et l'opérateur
sizeof
peut être utilisé dans une
expression constante
entière.
|
Si le type de expression est un tableau de taille variable , expression est évaluée et la taille du tableau résultant est calculée à l'exécution. |
(depuis C99) |
Le nombre d'éléments dans tout tableau a y compris les VLA (depuis C99) peut être déterminé avec l'expression sizeof a / sizeof a [ 0 ] . Notez que si a a un type pointeur (comme après la conversion tableau-vers-pointeur ou l'ajustement de type de paramètre de fonction), cette expression diviserait simplement le nombre d'octets dans un type pointeur par le nombre d'octets dans le type pointé.
Mots-clés
Exemple
La sortie d'exemple correspond à une plateforme avec des pointeurs 64 bits et des int 32 bits
#include <stdio.h> int main(void) { short x; // type argument: printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(void(*)(void)) = %zu\n", sizeof(void(*)(void))); printf("sizeof(char[10]) = %zu\n", sizeof(char[10])); // printf("sizeof(void(void)) = %zu\n", sizeof(void(void))); // Error: function type // printf("sizeof(char[]) = %zu\n", sizeof(char[])); // Error: incomplete type // expression argument: printf("sizeof 'a' = %zu\n", sizeof 'a'); // type of 'a' is int // printf("sizeof main = %zu\n", sizeof main); // Error: Function type printf("sizeof &main = %zu\n", sizeof &main); printf("sizeof \"hello\" = %zu\n", sizeof "hello"); // type is char[6] printf("sizeof x = %zu\n", sizeof x); // type of x is short printf("sizeof (x+1) = %zu\n", sizeof(x + 1)); // type of x+1 is int }
Sortie possible :
sizeof(float) = 4 sizeof(void(*)(void)) = 8 sizeof(char[10]) = 10 sizeof 'a' = 4 sizeof &main = 8 sizeof "hello" = 6 sizeof x = 2 sizeof (x+1) = 4
Références
- Norme C23 (ISO/IEC 9899:2024) :
-
- 6.5.3.4 Les opérateurs sizeof et alignof (p: TBD)
- Norme C17 (ISO/CEI 9899:2018):
-
- 6.5.3.4 Les opérateurs sizeof et _Alignof (p: À DÉTERMINER)
- Norme C11 (ISO/IEC 9899:2011):
-
- 6.5.3.4 Les opérateurs sizeof et _Alignof (p: 90-91)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 6.5.3.4 L'opérateur sizeof (p: 80-81)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.3.3.4 L'opérateur sizeof
Voir aussi
|
Documentation C++
pour
sizeof
operator
|