c

Diferencia entre size_t y unsigned int?



(6)

si se usa para representar un valor no negativo, entonces, ¿por qué no usamos unsigned int vez de size_t

Porque unsigned int no es el único tipo integral sin signo. size_t podría ser cualquiera de caracteres unsigned char , unsigned short , unsigned int , unsigned long o unsigned long long , dependiendo de la implementación.

La segunda pregunta es que size_t y unsinged int son intercambiables o no, y si no, ¿por qué?

No son intercambiables, por la razón explicada anteriormente ^^ .

¿Y alguien puede darme un buen ejemplo de size_t y su breve funcionamiento?

No entiendo muy bien por "su breve trabajo". Funciona como cualquier otro tipo sin signo (en particular, como el tipo al que se le ha añadido el tipo). Se le recomienda usar size_t cuando describa el tamaño de un objeto. En particular, el operador sizeof y varias funciones de biblioteca estándar, como strlen() , devuelven size_t .

Bono: aquí hay un buen artículo (artículo borrado, use la instantánea de la máquina de retorno ) sobre size_t (y el tipo ptrdiff_t estrechamente relacionado). Motiva muy bien por qué deberías usarlo.

Estoy tan confundido sobre size_t . He buscado en Internet y en todas partes se menciona que size_t es un tipo sin signo, por lo que puede representar un valor no negativo.

Mi primera pregunta es que si se usa para representar valores no negativos, ¿por qué no usamos unsigned int vez de size_t ?

Mi segunda pregunta es: ¿ size_t y unsigned int intercambiables o no? Si no, ¿por qué?

¿Y alguien puede darme un buen ejemplo de size_t y su breve funcionamiento?


Además de las otras respuestas, también documenta el código y le dice a la gente que estás hablando sobre el tamaño de los objetos en la memoria


El tipo size_t es un tipo base entero sin signo del lenguaje C / C ++. Es el tipo de resultado devuelto por el operador sizeof. El tamaño del tipo se elige para que pueda almacenar el tamaño máximo de una matriz teóricamente posible de cualquier tipo. En un tamaño de sistema de 32 bits, tomará 32 bits, en uno de 64 bits y 64 bits. En otras palabras, una variable de tipo size_t puede almacenar un puntero de forma segura. La excepción es punteros a funciones de clase, pero este es un caso especial. Aunque size_t puede almacenar un puntero, es mejor usar otro tipo de entero sin signo uintptr_t para ese propósito (su nombre refleja su capacidad). Los tipos size_t y uintptr_t son sinónimos. El tipo size_t se usa generalmente para contadores de bucles, indexación de matrices y aritmética de direcciones. El valor máximo posible del tipo size_t es constante SIZE_MAX.


Hay 5 tipos de entero estándar sin signo en C:

  • unsigned char
  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

con varios requisitos para sus tamaños y rangos (brevemente, el rango de cada tipo es un subconjunto del rango del siguiente tipo, pero algunos de ellos pueden tener el mismo rango).

size_t es un typedef (es decir, un alias) para un tipo sin firmar, (probablemente uno de los anteriores pero posiblemente un tipo de entero extendido sin signo , aunque eso es poco probable). Es el tipo cedido por el operador sizeof .

En un sistema, podría tener sentido usar unsigned int para representar tamaños; en otro, podría tener más sentido usar un unsigned long unsigned long long o un unsigned long long . ( size_t es poco probable que sea unsigned char unsigned short o unsigned short , pero eso está permitido).

El objetivo de size_t es size_t que el programador tenga que preocuparse por cuál de los tipos predefinidos se usa para representar tamaños.

El código que supone que sizeof produce una unsigned int no sería portátil. El código que asume que arroja un size_t es más probable que sea portátil.


size_t se usa para almacenar tamaños de objetos de datos, y se garantiza que pueda contener el tamaño de cualquier objeto de datos que pueda crear la implementación de C en particular. Este tipo de datos puede ser más pequeño (en número de bits), más grande o exactamente igual que unsigned int.


size_t tiene una restricción específica.

Citando de http://www.cplusplus.com/reference/cstring/size_t/ :

Alias ​​de uno de los tipos de enteros sin signo fundamentales.

Es un tipo capaz de representar el tamaño de cualquier objeto en bytes : size_t es el tipo devuelto por el operador sizeof y se usa ampliamente en la biblioteca estándar para representar tamaños y recuentos.

No es intercambiable con unsigned int porque el tamaño de int está especificado por el modelo de datos. Por ejemplo, LLP64 utiliza un int 32 bits e ILP64 utiliza un int 64 bits.