sizeof

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Catégorie

Opérateurs (C++)

Description

L'opérateur sizeof a deux utilisations distinctes :

sizeof expression-unaire
sizeof (nom-type)

Dans les deux cas, le résultat est une constante entière qui donne la taille en octets de l'espace mémoire utilisé par l'opérande (déterminé par son type, avec quelques exceptions). La quantité de mémoire réservée pour chaque type dépend de la machine.

Dans la première utilisation, le type de l'expression opérande est déterminé sans évaluer l'expression (et donc sans effets de bord). Lorsque l'opérande est de type char (signed ou unsigned), sizeof donne pour résultat 1. Lorsque l'opérande est un élément non-paramètre de type tableau, le résultat est le nombre total d'octets dans le tableau (en d'autres termes, un nom de tableau n'est pas converti en type pointeur). Le nombre d'éléments dans un tableau est égal à la taille du tableau divisée par la taille de son premier élément (tableau[0]) sizeof array / sizeof array[0].

Si l'opérande est un paramètre déclaré de type tableau ou fonction, sizeof donne la taille du pointeur. Appliqué à des structures et des unions, sizeof donne le nombre total d'octets, en incluant toute marge.

Vous ne pouvez pas utiliser sizeof avec des expressions de type fonction, de types incomplets, de noms parenthésés de tels types ou avec une lvalue qui désigne un objet champ de bits.

Le type entier du résultat de sizeof est size_t.

Vous pouvez utiliser sizeof dans les directives de préprocesseur ; cela est spécifique à Embarcadero C++.

En C++, sizeof(type_de_classe), où type_de_classe est dérivé d'une classe de base, renvoie la taille de l'objet (rappelez-vous que cela inclut la taille de la classe de base).

Exemple

/* UTILISEZ L'OPERATEUR sizeof POUR OBTENIR LA TAILLE DES DIFFERENTS TYPES DE DONNEES. */
#include <stdio.h>
struct st {
  char *name;
  int age;
  double height;
  };
struct st St_Array[]= {  /* UN TABLEAU DE structs */
  { "Jr.",     4,  34.20 },  /* St_Array[0] */
  { "Suzie",  23,  69.75 },  /* St_Array[1] */
  };
int main()
  {
    long double LD_Array[] = { 1.3, 501.09, 0.0007, 90.1, 17.08 };
    printf("\nNombre d'éléments de LD_Array = %d",
    sizeof(LD_Array) / sizeof(LD_Array[0]));
    /****  NOMBRE D'ELEMENTS DANS St_Array. ****/
    printf("\nSt_Array a %d éléments",
    sizeof(St_Array)/sizeof(St_Array[0]));
    /****  LE NOMBRE D'OCTETS DANS CHAQUE ELEMENT DE St_Array.  ****/
    printf("\nSt_Array[0] = %d", sizeof(St_Array[0]));
    /****  NOMBRE TOTAL D'OCTETS DE St_Array.  ****/
    printf("\nSt_Array=%d", sizeof(St_Array));
    return 0;
  }

Sortie

Nombre d'éléments dans LD_Array = 5
St_Array a 2 éléments
St_Array[0] = 16
St_Array= 32