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