C Programování

Operátor sizeof v jazyce C

Operátor sizeof v jazyce C
V tomto článku se budeme učit o operátoru sizeof v C. Jedná se o široce používaný unární operátor při vývoji zabudovaného softwaru, který nám pomáhá zjistit velikost operandu. Návratová hodnota operátoru sizeof nám tedy pomáhá pochopit počet bajtů přidělených v paměti počítače k ​​uložení konkrétní proměnné nebo typu dat.

Pochopení Sizeof:

Než se ponoříme do diskuse o velikosti operátora, nejprve pochopíme význam operátora. Operátor je reprezentován tokenem nebo symbolem, který slouží k provedení operace, jako je sčítání, odčítání, násobení, dělení atd. na hodnoty nebo proměnné (operandy). Například „*“ je symbol, který se používá k reprezentaci operace násobení, a funguje na dva operandy (result = a * b;). Toto je příklad binárního operátoru.

Pokud však operátor pracuje pouze na jednom operandu, nazýváme jej jako unární operátor. Operátor sizeof je jedním z unárních operátorů, které existují v programovacím jazyce C, a podle všeho funguje pouze na jednom operandu. Operátor sizeof vrací velikost operandu. To znamená, že z návratové hodnoty operátoru Sizeof můžeme jasně říci, kolik bajtů je přiděleno k uložení konkrétního operandu v paměti počítače.

Paměť počítače je sbírka paměťových jednotek (tj.E. byte). Když sizeof (int) vrátí čtyři v konkrétním počítačovém systému, můžeme říci, že celočíselná proměnná trvá 4 bajty, aby uchovala svou hodnotu v paměti konkrétního počítačového systému. Mějte také na paměti, že návratová hodnota operátoru sizeof závisí také na strojích, které používáte (32bitový systém nebo 64bitový systém).

Syntax:

Velikost (typ)
Sizeof (výraz)

Návratový typ sizeof je size_t.

Příklady:

Nyní, když rozumíme operátoru sizeof a známe syntaxi, podívejme se na pár příkladů, které nám pomohou lépe porozumět konceptu.

Velikost pro vestavěné typy (příklad1.C):

V tomto programu uvidíme, jak operátor sizeof funguje pro vestavěné datové typy jako int, char, float, double. Podívejme se na program a výstup.

#zahrnout
int main ()

printf ("Velikost znaku =% ld \ n", sizeof (znak));
printf ("Velikost int =% ld \ n", sizeof (int));
printf ("Velikost float =% ld \ n", sizeof (float));
printf ("Velikost double =% ld \ n \ n", sizeof (double));
printf ("Velikost krátkého int =% ld \ n", sizeof (krátký int));
printf ("Velikost dlouhého int =% ld \ n", sizeof (dlouhý int));
printf ("Velikost long long int =% ld \ n", sizeof (long long int));
printf ("Velikost dlouhého dvojitého =% ld \ n", velikost (dlouhého dvojitého));
návrat 0;

Velikost pole (příklad 2.C)

V tomto programu uvidíme, jak použít operátor sizeof pro různé typy polí. V případě pole se vrátí operátor sizeof (č. prvků v poli * Sizeof (typ pole)). Například když deklarujeme celočíselné pole 10 prvků (int SmartPhones [10];), vrátí se sizeof (Smartphony):

(Ne. prvků v chytrých telefonech * sizeof (int)) = (10 * 4) = 40

Podívejme se na program a výstup.

#zahrnout
int main ()

int SmartPhones [10];
char SmartPhoneNames [10];
zdvojnásobit SmartPhonesPrice [10];
printf ("Velikost int =% ld \ n", sizeof (int));
printf ("Velikost znaku =% ld \ n", sizeof (znak));
printf ("Velikost double =% ld \ n", sizeof (double));
/ * Zjistěte velikost pole * /
printf ("Velikost chytrých telefonů [10] =% ld \ n", sizeof (chytré telefony));
printf ("Velikost SmartPhoneNames [10] =% ld \ n", sizeof (SmartPhoneNames));
printf ("Velikost SmartPhonesPrice [10] =% ld \ n", sizeof (SmartPhonesPrice));
návrat 0;

Velikost pro uživatelem definované typy (příklad3.C):

V tomto příkladu uvidíme, jak použít operátor sizeof pro uživatelem definované datové typy, jako je struktura a sjednocení. Pojďme použít program a pochopit výstup.

Nyní, když se podíváme na program, můžeme velikost SmartPhoneType vypočítat ručně. Jak vidíte níže, SmartPhoneType je struktura a obsahuje následující prvky:

  • Počet proměnných typu znaků = 1 [sp_name]
  • Počet proměnných typu celé číslo = 1 [sp_version]
  • Počet proměnných typu float = 3 [sp_length, sp_width, sp_height]

Z příkladu 1 jsme viděli, že:

    • Velikost znaku je 1 bajt
    • Velikost celého čísla je 4 bajty
    • Velikost floatu je 4 bajty

Pokud tedy spočítáme velikost všech prvků ve struktuře, měli bychom být schopni získat velikost struktury, tj.E. SmartPhoneType. Proto by velikost struktury měla být = (1 + 4 + 4 + 4 + 4) bajtů = 17 bajtů. Výstup programu však říká, že velikost struktury je 20. Další 3 bajty (sp_name, což je znak, místo 4 bajtů bere 4 bajty) přidělené struktuře kvůli polstrování struktury.

#zahrnout
/ * Vytvořit uživatelsky definovaný typ struktury - SmartPhoneType * /
strukturovat SmartPhoneType

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
Chytrý telefon;
/ * Definujte uživatelem definovaný typ sjednocení - SmartPhoneUnionType * /
Union SmartPhoneUnionType

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhone_u;
int main ()

/ * Zjistěte velikost struktury a spojení * /
printf ("Velikost struktury =% ld \ n", sizeof (SmartPhone));
printf ("Velikost spojení =% ld \ n", sizeof (SmartPhone_u));
návrat 0;

Velikost proměnných (příklad4.C):

Tento ukázkový program ukazuje, že operátor sizeof je schopen přijmout proměnnou také a vrátit její velikost.

#zahrnout
int main ()

/ * Deklarujte proměnnou a pole char, int, float a double type * /
char var_a, var_b [20];
int var_c, var_d [20];
float var_e, var_f [20];
double var_g, var_h [20];
/ * Zjistěte velikost proměnných a pole.
Tento program ukazuje, že proměnná může také
použít jako velikost operandu operátora * /
/ * velikost char, char variable a char array * /
printf ("Velikost znaku =% ld \ n", sizeof (znak));
printf ("Velikost var_a =% ld \ n", sizeof (var_a));
printf ("Velikost var_b [20] =% ld \ n \ n", sizeof (var_b));
/ * velikost int, int proměnná a int pole * /
printf ("Velikost int =% ld \ n", sizeof (int));
printf ("Velikost var_c =% ld \ n", sizeof (var_c));
printf ("Velikost var_d [20] =% ld \ n \ n", sizeof (var_d));
/ * velikost float, float variable a float array * /
printf ("Velikost float =% ld \ n", sizeof (float));
printf ("Velikost var_e =% ld \ n", sizeof (var_e));
printf ("Velikost var_f [20] =% ld \ n \ n", sizeof (var_f));
/ * velikost dvojitého, dvojitého proměnného a dvojitého pole * /
printf ("Velikost double =% ld \ n", sizeof (double));
printf ("Velikost var_g =% ld \ n", sizeof (var_g));
printf ("Velikost var_h [20] =% ld \ n", sizeof (var_h));
návrat 0;

Velikost výrazu (příklad5.C):

V tomto ukázkovém programu ukážeme, že operátor sizeof může také přijmout výraz a vrátit velikost výsledného výrazu.

#zahrnout
int main ()

int var_a = 5, var_b = 3;
double var_c = 2.5, var_d = 4.5;
printf ("Velikost int =% ld \ n", sizeof (int));
printf ("Velikost double =% ld \ n \ n", sizeof (double));
printf ("Velikost var_a * var_b =% ld \ n", sizeof (var_a * var_b));
printf ("Velikost var_c * var_d =% ld \ n", sizeof (var_c * var_d));
/ * Zde vynásobíme celočíselnou proměnnou dvojitou proměnnou.
Operátor sizeof proto vrátí velikost maximální velikosti
proměnná i.E. proměnná typu double.* /
printf ("Velikost var_a * var_c =% ld \ n", sizeof (var_a * var_c));
návrat 0;

Praktické využití sizeof (příklad6.C):

Tento ukázkový program vám pomůže pochopit praktický případ použití operátoru sizeof. Operátor Sizeof je velmi užitečný při přidělování dynamické paměti z haldy pomocí malloc. Podívejme se na program a výstup.

#zahrnout
#zahrnout
typedef struktura

char sp_name;
int sp_version;
float sp_length;
float sp_width;
float sp_height;
SmartPhoneType;
int main ()

/ * Přidělte paměť v haldě pro uložení pěti SmartPhoneType
proměnné.
* /
SmartPhoneType * SmartPhone_Ptr = (SmartPhoneType *) malloc (5 * sizeof (SmartPhoneType));
pokud (SmartPhone_Ptr != NULL)

printf ("Paměť přidělená 5 strukturním proměnným SmartPhoneType v systému Windows
paměť haldy.\ n ");

jiný

printf ("Během alokace paměti haldy došlo k chybě!");

návrat 0;

Závěr:

Sizeof je důležitý unární operátor v programovacím jazyce C. Pomáhá nám to při určování velikosti primitivních datových typů, uživatelem definovaných datových typů, výrazů atd. v paměti počítače. Operátor Sizeof hraje důležitou roli při přidělování dynamické paměti v C pomocí malloc, calloc atd. v paměti haldy.

Hry Výukový program Shadow of the Tomb Raider pro Linux
Výukový program Shadow of the Tomb Raider pro Linux
Shadow of the Tomb Raider je dvanáctý přírůstek do série Tomb Raider - série akčních adventur vytvořená Eidosem Montrealem. Tato hra byla docela dobře...
Hry Jak zvýšit FPS v Linuxu?
Jak zvýšit FPS v Linuxu?
FPS znamená Snímků za sekundu. Úkolem FPS je měřit snímkovou frekvenci při přehrávání videa nebo herních výkonech. Jednoduše řečeno, počet nepřerušova...
Hry Nejlepší hry Oculus App Lab
Nejlepší hry Oculus App Lab
Pokud jste vlastníkem náhlavní soupravy Oculus, musíte mít informace o bočním nakládání. Sideloading je proces instalace neukládaného obsahu do náhlav...