Operatore sizeof

Restituisce le dimensioni dell'operando rispetto alle dimensioni di tipo char.

Nota

Per informazioni sull'operatore sizeof ... , vedere Puntini di sospensione e modelli variadic.

Sintassi

sizeof unary-expression
sizeof ( type-name )

Osservazioni:

Il risultato dell'operatore sizeof è di tipo size_t, un tipo integrale definito nel file <di inclusione stddef.h>. Tale operatore consente di evitare di specificare le dimensioni dei dati dipendenti dal computer nei programmi.

L'operando da sizeof può essere uno dei seguenti:

  • Un nome di tipo. Per usare sizeof con un nome di tipo, il nome deve essere racchiuso tra parentesi.

  • Espressione. Se usato con un'espressione, sizeof può essere specificato con o senza parentesi. L'espressione non viene valutata.

Quando l'operatore sizeof viene applicato a un oggetto di tipo char, restituisce 1. Quando l'operatore sizeof viene applicato a una matrice, restituisce il numero totale di byte in tale matrice, non le dimensioni del puntatore rappresentato dall'identificatore di matrice. Per ottenere le dimensioni del puntatore rappresentato dall'identificatore di matrice, passarlo come parametro a una funzione che usa sizeof. Ad esempio:

Esempio

#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;
}

Output di esempio

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

Quando l'operatore sizeof viene applicato a un classtipo , structo union , il risultato è il numero di byte in un oggetto di tale tipo, oltre a qualsiasi spaziatura interna aggiunta per allineare i membri ai limiti delle parole. Il risultato non corrisponde necessariamente alla dimensione calcolata sommando i requisiti di archiviazione dei singoli membri. L'opzione del compilatore /Zp e il pragma pack influiscono sui limiti di allineamento per i membri.

L'operatore sizeof non restituisce mai 0, anche per una classe vuota.

L'operatore sizeof non può essere usato con gli operandi seguenti:

  • Funzioni. Tuttavia, sizeof può essere applicato ai puntatori alle funzioni.

  • Campi di bit.

  • Classi non definite.

  • Tipo void.

  • Matrici allocate in modo dinamico.

  • Matrici esterne.

  • Tipi incompleti.

  • Nomi tra parentesi di tipi incompleti.

Quando l'operatore sizeof viene applicato a un riferimento, il risultato corrisponde a se sizeof fosse stato applicato all'oggetto stesso.

Se una matrice non dimensionata è l'ultimo elemento di una struttura, l'operatore sizeof restituisce le dimensioni della struttura senza la matrice.

L'operatore sizeof viene spesso usato per calcolare il numero di elementi in una matrice usando un'espressione del form:

sizeof array / sizeof array[0]

Vedi anche

Espressioni con operatori unari
Parole chiave