size_t es un tipo de datos integral sin firmar que se define en varios archivos de encabezado, como:
<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>
Es un tipo que se utiliza para representar el tamaño de los objetos en bytes y, por lo tanto, el operador sizeof lo utiliza como tipo de retorno . Se garantiza que será lo suficientemente grande como para contener el tamaño del objeto más grande que el sistema host pueda manejar. Básicamente, el tamaño máximo permitido depende del compilador; si el compilador es de 32 bits, entonces es simplemente un typedef (es decir, un alias) para unsigned int , pero si el compilador es de 64 bits, entonces sería un typedef para unsigned long long . El tipo de datos size_t nunca es negativo. Por lo tanto, muchas funciones de la biblioteca C como malloc, memcpy y strlen declaran sus argumentos y devuelven el tipo como size_t . Por ejemplo,
// 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 o cualquier tipo sin signo puede verse usado como variable de bucle, ya que las variables de bucle suelen ser mayores o iguales a 0.
Nota: cuando usamos un objeto size_t , debemos asegurarnos de que se use en todos los contextos, incluida la aritmética, solo queremos valores no negativos. Por ejemplo, el siguiente programa definitivamente daría el resultado inesperado:
// C program to demonstrate that size_t or // any unsigned int type should be used // carefully when used in a loop. #include<stdio.h> #define N 10 int main() { int a[N]; // This is fine. for (size_t n = 0; n < N; ++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]); }
Output Infinite loop and then segmentation fault
Este artículo es una contribución de Shubham Bansal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA