¿Cuál es el tipo de datos size_t en C?

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *