Sdílet prostřednictvím


sizeof – operátor (C)

Operátor sizeof poskytuje velikost úložiště (v bajtech) potřebného k uložení objektu typu operandu. Tento operátor vám umožní vyhnout se zadávání velikostí dat závislých na počítačích v programech.

Syntaxe

sizeof unary-expression
sizeof ( type-name )

Poznámky

Operand je buď identifikátor, který je unární výraz, nebo výraz přetypování typu (to znamená specifikátor typu uzavřený v závorkách). Unární výraz nemůže představovat objekt bitového pole, neúplný typ ani návrh funkce. Výsledkem je celočíselná konstanta bez znaménka. Standardní hlavička STDDEF. H tento typ definuje jako size_t.

Při použití operátoru sizeof na identifikátor pole bude výsledkem velikost celého pole namísto velikosti ukazatele reprezentovaného tímto identifikátorem pole.

Při použití operátoru sizeof na název typu struktury nebo sjednocení nebo na identifikátor typu struktury nebo sjednocení bude výsledkem počet bajtů v této struktuře nebo sjednocení, včetně vnitřního a koncového odsazení. Tato velikost může zahrnovat vnitřní a koncové odsazení použité pro zarovnání členů struktury nebo sjednocení na hranicích paměti. Proto výsledek nemusí nutně odpovídat velikosti vypočítané sečtením požadavků na úložiště jednotlivých členů.

Je-li posledním prvkem struktury pole bez velikosti, operátor sizeof vrátí velikost struktury bez tohoto pole.

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

V tomto příkladu je operátor sizeof použit pro předání velikosti typu int, který se mezi počítači liší, jako argumentu funkce modulu runtime s názvem calloc. Hodnota vrácená touto funkcí je uložena v 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] );

V tomto příkladu je proměnná strings pole ukazatelů na typ char. Počet ukazatelů je počet prvků v poli, ale není zadán. Chcete-li vypočítat počet prvků v tomto poli, lze počet ukazatelů snadno určit pomocí operátoru sizeof. Celočíselná const hodnota string_no je inicializována na toto číslo. Protože se jedná o const hodnotu, string_no nelze ji změnit.

Viz také

Operátory jazyka C
Integrované operátory C++, jejich priorita a asociativita