Namespaces
Variants

sizeof operator

From cppreference.net

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

1) Renvoie la taille, en octets, de la représentation d'objet du type
2) Renvoie la taille, en octets, de la représentation objet du type de expression . Aucune conversion implicite n'est appliquée à expression .

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 sizeof , il n'est pas spécifié si l'expression de taille est évaluée ou non.

(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

sizeof

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