logo

Quin és el tipus de dades size_t a C?

mida_t és un tipus de dades enter sense signar que es defineix en diversos fitxers de capçalera com ara:

, , , , ,>

És un tipus que s'utilitza per representar la mida dels objectes en bytes i, per tant, s'utilitza com a tipus de retorn pel mida de operador . Es garanteix que serà prou gran com per contenir la mida de l'objecte més gran que el sistema amfitrió pot gestionar. Bàsicament, la mida màxima permesa depèn del compilador; si el compilador és de 32 bits, és simplement un typedef (és a dir, àlies) per int sense sign però si el compilador és de 64 bits, seria un typedef per sense signar molt llarg . El mida_t el tipus de dades mai és negatiu.
Per tant, moltes funcions de biblioteca C com malloc, memcpy i strlen declaren els seus arguments i retornen el tipus com mida_t . Per exemple,

C






cadena invertida java
// 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);>

>

>

mida_t o qualsevol tipus sense signar es pot veure com a variable de bucle, ja que les variables de bucle solen ser majors o iguals a 0.
Nota: Quan fem servir a mida_t objecte, ens hem d'assegurar que en tots els contextos que s'utilitza, inclosa l'aritmètica, només volem valors no negatius. Per exemple, el programa següent donaria sens dubte el resultat inesperat:

Exemple 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]); }>>>

entrada java
> 

Output Infinite loop and then segmentation fault>


Exemple 2

  • El tipus de dades size_t en C és un tipus d'enter sense signe que s'utilitza per representar la mida dels objectes en bytes. Es defineix a la capçalera stddef.h i s'utilitza habitualment per representar la mida de matrius, blocs de memòria i cadenes.
  • Aquí hi ha un exemple de programa que demostra l'ús de size_t:

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;> }>

>

>

  • en aquest programa, size_t s'utilitza per emmagatzemar la mida de la matriu en bytes.
  • L'operador sizeof s'utilitza per determinar la mida de la matriu, que després s'emmagatzema a la variable de mida del tipus size_t. L'especificador de format %lu s'utilitza per imprimir el valor de size_t, que és un nombre enter llarg sense signe.
  • Les sortides del programa La mida de la matriu és: 20, que és el nombre de bytes que ocupa la matriu (5 elements * 4 bytes per element).

Avantatges d'utilitzar size_t a la programació C:

  • Portabilitat : El tipus de dades size_t es defineix a la capçalera stddef.h, que forma part de la biblioteca estàndard C. Si feu servir size_t, podeu assegurar-vos que el vostre codi sigui portàtil a diferents plataformes i compiladors.
  • Sense signar : size_t és un tipus d'enter sense signe, el que significa que pot representar mides fins a la mida màxima dels enters sense signe. Això és útil quan es tracta de matrius i blocs de memòria, ja que les mides mai poden ser negatives.
  • Rendiment : size_t s'acostuma a implementar com un tipus d'enter ràpid i eficaç, i utilitzar-lo pot donar lloc a un millor rendiment que utilitzar altres tipus d'entiers.
  • Intenció clara: L'ús de size_t deixa clar al lector del vostre codi que esteu tractant amb mides i no amb altres tipus d'enters. Això fa que el codi sigui més fàcil d'entendre i menys propens a errors.
  • Normalització : En utilitzar size_t, esteu seguint un estàndard àmpliament utilitzat i acceptat, que fa que el vostre codi sigui més llegible i fàcil de mantenir per a altres programadors.
  • Interoperabilitat : size_t s'utilitza àmpliament en moltes biblioteques i API, i utilitzar-lo al vostre codi permet una integració més fàcil amb altres codis.