Operatore sizeof (C)sizeof Operator (C)

L'operatore sizeof indica la quantità di spazio di archiviazione in byte necessaria per archiviare un oggetto del tipo dell'operando.The sizeof operator gives the amount of storage, in bytes, required to store an object of the type of the operand. Tale operatore consente di evitare di specificare le dimensioni dei dati dipendenti dal computer nei programmi.This operator allows you to avoid specifying machine-dependent data sizes in your programs.

SintassiSyntax

sizeof unary-expression  
sizeof ( type-name )  

OsservazioniRemarks

L'operando è un identificatore che rappresenta un elemento unary-expression o un'espressione cast di tipo, ovvero un identificatore di tipo racchiuso tra parentesi.The operand is either an identifier that is a unary-expression, or a type-cast expression (that is, a type specifier enclosed in parentheses). L'elemento unary-expression non può rappresentare un oggetto del campo di bit, un tipo incompleto o un indicatore di funzione.The unary-expression cannot represent a bit-field object, an incomplete type, or a function designator. Il risultato è una costante integrale senza segno.The result is an unsigned integral constant. Nell'intestazione standard STDDEF.H questo tipo viene definito come size_t.The standard header STDDEF.H defines this type as size_t.

Quando si applica l'operatore sizeof a un identificatore di matrice, il risultato è la dimensione dell'intera matrice anziché la dimensione del puntatore rappresentato dall'identificatore di matrice.When you apply the sizeof operator to an array identifier, the result is the size of the entire array rather than the size of the pointer represented by the array identifier.

Quando si applica l'operatore sizeof al nome di un tipo di struttura o di unione o a un identificatore del tipo di struttura o di unione, il risultato è il numero di byte nella struttura o nell'unione, incluse la spaziatura interna e finale.When you apply the sizeof operator to a structure or union type name, or to an identifier of structure or union type, the result is the number of bytes in the structure or union, including internal and trailing padding. Questa dimensione può includere la spaziatura interna e finale utilizzate per allineare i membri della struttura o dell'unione ai limiti della memoria.This size may include internal and trailing padding used to align the members of the structure or union on memory boundaries. Pertanto, il risultato potrebbe non corrispondere alla dimensione calcolata aggiungendo i requisiti di archiviazione dei singoli membri.Thus, the result may not correspond to the size calculated by adding up the storage requirements of the individual members.

Se una matrice non dimensionata è l'ultimo elemento di una struttura, l'operatore sizeof restituisce le dimensioni della struttura senza la matrice.If an unsized array is the last element of a structure, the sizeof operator returns the size of the structure without the array.

buffer = calloc(100, sizeof (int) );  

In questo esempio viene utilizzato l'operatore sizeof per passare la dimensione a un int, che varia a seconda del computer, come argomento di una funzione di runtime calloc.This example uses the sizeof operator to pass the size of an int, which varies among machines, as an argument to a run-time function named calloc. Il valore restituito dalla funzione viene archiviato in buffer.The value returned by the function is stored in buffer.

static char *strings[] = {  
      "this is string one",  
      "this is string two",  
      "this is string three",  
   };  
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );   

In questo esempio, strings è una matrice di puntatori a char.In this example, strings is an array of pointers to char. Il numero dei puntatori è il numero di elementi nella matrice, ma non è specificato.The number of pointers is the number of elements in the array, but is not specified. Il numero dei puntatori può essere facilmente determinato utilizzando l'operatore sizeof per calcolare il numero di elementi nella matrice.It is easy to determine the number of pointers by using the sizeof operator to calculate the number of elements in the array. Il valore const Integer string_no viene inizializzato su questo numero.The const integer value string_no is initialized to this number. Poiché si tratta di un valore const, string_no non può essere modificato.Because it is a const value, string_no cannot be modified.

Vedere ancheSee Also

Operatori CC Operators
Operatori C++, precedenza e associazioneC++ Built-in Operators, Precedence and Associativity