sizeof, opérateur

Donne la taille de son opérande par rapport à la taille du type char.

Remarque

Pour plus d’informations sur l’opérateur sizeof ..., consultez Points de suspension et modèles variadiques.

Syntaxe

sizeof unary-expression
sizeof ( type-name )

Notes

Le résultat de l’opérateur sizeof est de type size_t, un type intégral défini dans le fichier include <stddef.h>. Cet opérateur vous permet d'éviter de spécifier les tailles de données dépendantes de l'ordinateur dans vos programmes.

L’opérande pour sizeof peut être un des suivants :

  • Un nom de type. Pour utiliser sizeof avec un nom de type, le nom doit être placé entre des parenthèses.

  • Expression. Quand il est utilisé avec une expression, sizeof peut être spécifié avec ou sans les parenthèses. L'expression n'est pas évaluée.

Quand l’opérateur sizeof est appliqué à un objet de type char, il donne comme résultat 1. Quand l’opérateur sizeof est appliqué à un tableau, il donne le nombre total d’octets dans ce tableau, et non pas la taille du pointeur représenté par l’identificateur du tableau. Pour obtenir la taille du pointeur représenté par l’identificateur du tableau, passez-le comme paramètre à une fonction qui utilise sizeof. Par exemple :

Exemple

#include <iostream>
using namespace std;

size_t getPtrSize( char *ptr )
{
   return sizeof( ptr );
}

int main()
{
   char szHello[] = "Hello, world!";

   cout  << "The size of a char is: "
         << sizeof( char )
         << "\nThe length of " << szHello << " is: "
         << sizeof szHello
         << "\nThe size of the pointer is "
         << getPtrSize( szHello ) << endl;
}

Exemple de sortie

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4

Quand l’opérateur sizeof est appliqué à un type class, struct ou union, le résultat est le nombre d’octets dans un objet de ce type, plus l’éventuel remplissage ajouté pour aligner les membres sur les limites des mots. Le résultat ne correspond pas forcément à la taille calculée en additionnant les exigences en matière de stockage des membres individuels. L’option de compilateur /Zp et le pragma pack affectent les limites d’alignement pour les membres.

L’opérateur sizeof ne donne jamais 0, même pour une classe vide.

L’opérateur sizeof ne peut pas être utilisé avec les opérandes suivants :

  • Fonctions. (Cependant, sizeof peut être appliqué aux pointeurs vers des fonctions.)

  • Champ de bits.

  • Classes indéfinies.

  • Le type void.

  • Tableaux alloués de manière dynamique.

  • Tableaux externes.

  • Types incomplets.

  • Noms entre parenthèses de types incomplets.

Quand l’opérateur sizeof est appliqué à une référence, le résultat est le même que si sizeof avait été appliqué à l’objet lui-même.

Si un tableau non dimensionné est le dernier élément d'une structure, l'opérateur sizeof retourne la taille de la structure sans le tableau.

L’opérateur sizeof est souvent utilisé pour calculer le nombre d’éléments dans un tableau en utilisant une expression de la forme :

sizeof array / sizeof array[0]

Voir aussi

Expressions avec opérateurs unaires
Mots clés