size_t je celočíselný dátový typ bez znamienka, ktorý je definovaný v rôznych hlavičkových súboroch, ako napríklad:
, , , , ,>
Je to typ, ktorý sa používa na vyjadrenie veľkosti objektov v bajtoch, a preto ho používa ako návratový typ veľkosť operátor . Je zaručené, že je dostatočne veľký, aby obsahoval veľkosť najväčšieho objektu, ktorý hostiteľský systém dokáže spracovať. V podstate maximálna povolená veľkosť závisí od kompilátora; ak je kompilátor 32-bitový, potom je to jednoducho typová definícia (t. j. alias) pre nepodpísaný int ale ak je kompilátor 64-bitový, potom by to bola definícia typu nepodpísané dlhé dlhé . The size_t dátový typ nie je nikdy záporný.
Preto mnoho funkcií knižnice C ako malloc, memcpy a strlen deklarovať svoje argumenty a vrátiť typ ako size_t . napr.
C
operátor zvyšku pythonu
// Declaration of various standard library functions.> // Here argument of 'n' refers to maximum blocks that can be> // allocated which is guaranteed to be non-negative.> void>*>malloc>(>size_t> n);> // While copying 'n' bytes from 's2' to 's1'> // n must be non-negative integer.> void>*>memcpy>(>void>* s1,>void> const>* s2,>size_t> n);> // strlen() uses size_t because the length of any string> // will always be at least 0.> size_t> strlen>(>char> const>* s);> |
>
>
size_t alebo akýkoľvek typ bez znamienka môže byť použitý ako premenná slučky, pretože premenné slučky sú zvyčajne väčšie alebo rovné 0.
Poznámka: Keď použijeme a size_t objekt, musíme sa uistiť, že vo všetkých kontextoch, v ktorých sa používa, vrátane aritmetiky, chceme iba nezáporné hodnoty. Napríklad nasledujúci program by určite priniesol neočakávaný výsledok:
Príklad 1
C
// C program to demonstrate that size_t or> // any unsigned int type should be used> // carefully when used in a loop.> #include> #define N 10> int> main()> {> >int> a[N];> >// This is fine.> >for> (>size_t> n = 0; n a[n] = n; } // But reverse cycles are tricky for unsigned // types as they can lead to infinite loops. for (size_t n = N - 1; n>= 0; --n) printf('%d ', a[n]); }> |
previesť nfa na dfa
>
>
Output Infinite loop and then segmentation fault>
Príklad 2
- Dátový typ size_t v C je typ celého čísla bez znamienka, ktorý sa používa na vyjadrenie veľkosti objektov v bajtoch. Je definovaný v hlavičke stddef.h a bežne sa používa na vyjadrenie veľkosti polí, pamäťových blokov a reťazcov.
- Tu je príklad programu, ktorý demonštruje použitie size_t:
C
hashmap
#include> #include> int> main()> {> >int> array[5] = { 1, 2, 3, 4, 5 };> >size_t> size =>sizeof>(array);> >printf>(>'The size of the array is: %lu
'>, size);> >return> 0;> }> |
>
>
- v tomto programe sa veľkosť_t používa na uloženie veľkosti poľa v bajtoch.
- Operátor sizeof sa používa na určenie veľkosti poľa, ktoré sa potom uloží do premennej veľkosti typu size_t. Špecifikátor formátu %lu sa používa na vytlačenie hodnoty size_t, čo je dlhé celé číslo bez znamienka.
- Výstup programu Veľkosť poľa je: 20, čo je počet bajtov, ktoré pole zaberá (5 prvkov * 4 bajty na prvok).
Výhody použitia size_t v programovaní C:
- Prenosnosť : Dátový typ size_t je definovaný v hlavičke stddef.h, ktorá je súčasťou štandardnej knižnice C. Použitím size_t môžete zaistiť, že váš kód bude prenosný naprieč rôznymi platformami a kompilátormi.
- Nepodpísané : size_t je typ celého čísla bez znamienka, čo znamená, že môže reprezentovať veľkosti až do maximálnej veľkosti celých čísel bez znamienka. To je užitočné pri práci s poliami a pamäťovými blokmi, pretože veľkosti nemôžu byť nikdy záporné.
- Výkon : size_t sa zvyčajne implementuje ako rýchly a efektívny celočíselný typ a jeho použitie môže viesť k lepšiemu výkonu ako pri použití iných celočíselných typov.
- Jasný zámer: Použitím size_t bude čitateľovi vášho kódu jasné, že máte do činenia s veľkosťami a nie inými typmi celých čísel. Vďaka tomu je kód ľahšie zrozumiteľný a menej náchylný na chyby.
- Štandardizácia : Používaním size_t sa riadite široko používaným a akceptovaným štandardom, vďaka ktorému je váš kód čitateľnejší a udržiavateľný pre iných programátorov.
- Interoperabilita : size_t je široko používaný v mnohých knižniciach a rozhraniach API a jeho použitie vo vašom kóde umožňuje jednoduchšiu integráciu s iným kódom.