velikost_t je celočíselný datový typ bez znaménka, který je definován v různých hlavičkových souborech, jako jsou:
, , , , ,>
Je to typ, který se používá k reprezentaci velikosti objektů v bajtech, a proto jej používá jako návratový typ velikost operátor . Je zaručeno, že je dostatečně velký, aby pojal velikost největšího objektu, který hostitelský systém dokáže zpracovat. V zásadě maximální přípustná velikost závisí na kompilátoru; pokud je kompilátor 32bitový, pak je to jednoduše typedef (tj. alias) pro nepodepsaný int ale pokud je kompilátor 64bitový, pak by to byl typ definice nepodepsané dlouhé dlouhé . The velikost_t datový typ není nikdy záporný.
Proto mnoho funkcí knihovny C jako malloc, memcpy a strlen deklarovat jejich argumenty a vrátit typ jako velikost_t . Například,
C
java programovací pole
// 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);> |
>
>
velikost_t nebo jakýkoli typ bez znaménka může být použit jako proměnná smyčky, protože proměnné smyčky jsou obvykle větší nebo rovné 0.
Poznámka: Když použijeme a velikost_t objektu, musíme se ujistit, že ve všech kontextech, v nichž se používá, včetně aritmetiky, chceme pouze nezáporné hodnoty. Například následující program by určitě dal neočekávaný výsledek:
Pří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]); }> |
filtrovací python
>
>
Output Infinite loop and then segmentation fault>
Příklad 2
- Datový typ size_t v jazyce C je celočíselný typ bez znaménka používaný k reprezentaci velikosti objektů v bajtech. Je definována v hlavičce stddef.h a běžně se používá k reprezentaci velikosti polí, paměťových bloků a řetězců.
- Zde je příklad programu, který demonstruje použití size_t:
C
číst excel soubor v Javě
#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 programu se velikost_t používá k uložení velikosti pole v bajtech.
- Operátor sizeof se používá k určení velikosti pole, které se pak uloží do proměnné size typu size_t. Specifikátor formátu %lu se používá k tisku hodnoty size_t, což je dlouhé celé číslo bez znaménka.
- Výstup programu Velikost pole je: 20, což je počet bajtů obsazených polem (5 prvků * 4 bajty na prvek).
Výhody použití size_t v programování C:
- Přenosnost : Datový typ size_t je definován v hlavičce stddef.h, která je součástí standardní knihovny C. Pomocí size_t můžete zajistit, že váš kód bude přenosný napříč různými platformami a kompilátory.
- Nepodepsaný : size_t je typ celého čísla bez znaménka, což znamená, že může reprezentovat velikosti až do maximální velikosti celých čísel bez znaménka. To je užitečné při práci s poli a paměťovými bloky, protože velikosti nemohou být nikdy záporné.
- Výkon : size_t je obvykle implementován jako rychlý a efektivní celočíselný typ a jeho použití může vést k lepšímu výkonu než použití jiných celočíselných typů.
- Jasný záměr: Použití size_t objasní čtenáři vašeho kódu, že máte co do činění s velikostmi a ne s jinými typy celých čísel. Díky tomu je kód srozumitelnější a méně náchylný k chybám.
- Standardizace : Používáním size_t se řídíte široce používaným a přijímaným standardem, díky kterému je váš kód čitelnější a lépe udržovatelný pro ostatní programátory.
- Interoperabilita : size_t je široce používán v mnoha knihovnách a rozhraních API a jeho použití ve vašem kódu umožňuje snazší integraci s jiným kódem.