Dela via


sizeof operator

Ger storleken på dess operande med avseende på storleken på typen char.

Anmärkning

Information om operatorn finns i sizeof ...Ellips- och variadic-mallar.

Syntax

sizeof unary-expression
sizeof ( type-name )

Anmärkningar

Resultatet av operatorn sizeof är av typen size_t, en integrerad typ som definierats i inkluderingsfilen <stddef.h>. Med den här operatorn kan du undvika att ange datorberoende datastorlekar i dina program.

Operand till sizeof kan vara något av följande:

  • Ett typnamn. Om du vill använda sizeof med ett typnamn måste namnet omges av parenteser.

  • Ett uttryck. När det används med ett uttryck sizeof kan anges med eller utan parenteser. Uttrycket utvärderas inte.

När operatorn sizeof tillämpas på ett objekt av typen charger den 1. När operatorn sizeof tillämpas på en matris ger den det totala antalet byte i matrisen, inte storleken på pekaren som representeras av matrisidentifieraren. Om du vill hämta storleken på pekaren som representeras av matrisidentifieraren skickar du den som en parameter till en funktion som använder sizeof. Till exempel:

Exempel

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

Exempelutdata

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

När operatorn sizeof tillämpas på en class, struct, eller union -typ blir resultatet antalet byte i ett objekt av den typen, plus eventuell utfyllnad som läggs till för att justera medlemmar på ordgränser. Resultatet motsvarar inte nödvändigtvis den storlek som beräknas genom att lägga till de enskilda medlemmarnas lagringskrav. Kompilatoralternativet /Zp och pack-pragma påverkar justeringsgränserna för medlemmar.

Operatorn sizeof ger aldrig 0, inte ens för en tom klass.

Operatorn sizeof kan inte användas med följande operander:

  • Funktioner. (Kan dock sizeof användas för pekare på funktioner.)

  • Bitfält.

  • Odefinierade klasser.

  • Typen void.

  • Dynamiskt allokerade matriser.

  • Externa matriser.

  • Ofullständiga typer.

  • Parenteserade namn på ofullständiga typer.

När operatorn sizeof tillämpas på en referens blir resultatet detsamma som om sizeof det hade tillämpats på själva objektet.

Om en icke-anpassad matris är det sista elementet i en struktur returnerar operatorn sizeof strukturens storlek utan matrisen.

Operatorn sizeof används ofta för att beräkna antalet element i en matris med hjälp av ett uttryck i formuläret:

sizeof array / sizeof array[0]

Se även

Uttryck med unary-operatorer
nyckelord