maat_t is een niet-ondertekend geheel getalgegevenstype dat is gedefinieerd in verschillende headerbestanden, zoals:
, , , , ,>
Het is een type dat wordt gebruikt om de grootte van objecten in bytes weer te geven en daarom door de De grootte van exploitant . Het is gegarandeerd groot genoeg om de grootte te bevatten van het grootste object dat het hostsysteem aankan. In principe is de maximaal toegestane grootte afhankelijk van de compiler; als de compiler 32 bit is, dan is het eenvoudigweg een typedef (d.w.z. alias) voor niet ondertekend int maar als de compiler 64 bit is, zou het een typedef zijn niet ondertekend lang lang . De maat_t gegevenstype is nooit negatief.
Daarom werken veel C-bibliotheekfuncties zoals malloc, memcpy en strlen declareer hun argumenten en retourneer het type als maat_t . Bijvoorbeeld,
C
prestatietesten
// 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);> |
>
>
maat_t of elk niet-ondertekend type kan worden gebruikt als lusvariabele, aangezien lusvariabelen doorgaans groter zijn dan of gelijk zijn aan 0.
Opmerking: Wanneer we gebruik maken van een maat_t object, moeten we ervoor zorgen dat we in alle contexten die het wordt gebruikt, inclusief de rekenkunde, alleen niet-negatieve waarden willen. Het volgende programma zou bijvoorbeeld zeker het onverwachte resultaat opleveren:
voorbeeld 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]); }> |
java cast char naar string
>
>
Output Infinite loop and then segmentation fault>
Voorbeeld 2
- Het gegevenstype size_t in C is een geheel getal zonder teken dat wordt gebruikt om de grootte van objecten in bytes weer te geven. Het wordt gedefinieerd in de stddef.h-header en wordt vaak gebruikt om de grootte van arrays, geheugenblokken en strings weer te geven.
- Hier is een voorbeeldprogramma dat het gebruik van size_t demonstreert:
C
#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;> }> |
... op Java
>
>
- in dit programma wordt size_t gebruikt om de grootte van de array in bytes op te slaan.
- De operator sizeof wordt gebruikt om de grootte van de array te bepalen, die vervolgens wordt opgeslagen in de size-variabele van het type size_t. De %lu-formaatspecificatie wordt gebruikt om de waarde van size_t af te drukken, wat een lang geheel getal zonder teken is.
- De programma-uitvoer De grootte van de array is: 20, wat het aantal bytes is dat door de array wordt ingenomen (5 elementen * 4 bytes per element).
Voordelen van het gebruik van size_t in C-programmering:
- Draagbaarheid : Het gegevenstype size_t wordt gedefinieerd in de stddef.h-header, die deel uitmaakt van de C-standaardbibliotheek. Door size_t te gebruiken, kunt u ervoor zorgen dat uw code overdraagbaar is naar verschillende platforms en compilers.
- Niet ondertekend : size_t is een geheel getal zonder teken, wat betekent dat het groottes kan vertegenwoordigen tot de maximale grootte van gehele getallen zonder teken. Dit is handig bij het omgaan met arrays en geheugenblokken, omdat de grootte nooit negatief kan zijn.
- Prestatie : size_t wordt meestal geïmplementeerd als een snel en efficiënt geheel getaltype, en het gebruik ervan kan resulteren in betere prestaties dan het gebruik van andere gehele typen.
- Duidelijke bedoeling: Door size_t te gebruiken, wordt het voor de lezer van uw code duidelijk dat u met maten te maken heeft en niet met andere soorten gehele getallen. Dit maakt de code gemakkelijker te begrijpen en minder gevoelig voor fouten.
- Standaardisatie : Door size_t te gebruiken, volgt u een veelgebruikte en geaccepteerde standaard, waardoor uw code leesbaarder en onderhoudbaarder wordt voor andere programmeurs.
- Interoperabiliteit : size_t wordt veel gebruikt in veel bibliotheken en API's, en als u het in uw code gebruikt, is integratie met andere code eenvoudiger.