C Tipos de datos
En el lenguaje C, el tipo de datos se refiere a un amplio sistema utilizado para declarar variables o funciones de diferentes tipos. El tipo de una variable determina el espacio que ocupa su almacenamiento y cómo se interpretan los patrones de bits almacenados.
Los tipos en C se pueden dividir en las siguientes categorías:
| N.º | Tipo y descripción |
|---|---|
| 1 | Tipos de datos básicos Son tipos aritméticos, incluyen entero (int), carácter (char), punto flotante (float) y doble precisión (double). |
| 2 | Tipos de enumeración: También son tipos aritméticos; se utilizan para definir variables que solo pueden recibir un conjunto de valores enteros discretos en el programa. |
| 3 | Tipo void: Especificador de tipovoidRepresenta un tipo de datos sin valor; normalmente se usa para valores de retorno de funciones. |
| 4 | Tipos derivados: Incluyen tipos de arreglo (array), tipos de puntero y tipos de estructura. |
Los tipos de arreglo y estructura se denominan colectivamente tipos agregados. El tipo de una función se refiere al tipo de valor que devuelve. En el resto de esta sección presentaremos los tipos básicos; los otros tipos se explicarán en capítulos posteriores.
Tipos enteros
La siguiente tabla detalla el tamaño de almacenamiento y el rango de valores de los tipos enteros estándar:
| Tipo | Tamaño de almacenamiento | Rango de valores |
|---|---|---|
| char | 1 byte | -128 a 127 o 0 a 255 |
| unsigned char | 1 byte | 0 a 255 |
| signed char | 1 byte | -128 a 127 |
| int | 2 o 4 bytes | -32,768 a 32,767 o -2,147,483,648 a 2,147,483,647 |
| unsigned int | 2 o 4 bytes | 0 a 65,535 o 0 a 4,294,967,295 |
| short | 2 bytes | -32,768 a 32,767 |
| unsigned short | 2 bytes | 0 a 65,535 |
| long | 4 bytes | -2,147,483,648 a 2,147,483,647 |
| unsigned long | 4 bytes | 0 a 4,294,967,295 |
Tenga en cuenta que el tamaño de almacenamiento de varios tipos está relacionado con la arquitectura del sistema, pero actualmente se utilizan principalmente sistemas de 64 bits.
A continuación se muestran las diferencias de tamaño entre sistemas de 32 bits y 64 bits (igual en Windows):
Para obtener el tamaño exacto de un tipo o variable en una plataforma específica, puede usar el operadorsizeofsizeof. La expresiónsizeof(type)sizeof(type) obtiene el tamaño de almacenamiento en bytes de un objeto o tipo. El siguiente ejemplo demuestra cómo obtener el tamaño del tipo int:
Ejemplo
%lues un entero sin signo de 32 bits, para más detalles consulteFunciones de la biblioteca C - printf()。
Cuando compile y ejecute el programa anterior en Linux, producirá el siguiente resultado:
int 存储大小 : 4
Tipos de punto flotante
La siguiente tabla detalla el tamaño de almacenamiento, el rango de valores y la precisión de los tipos de punto flotante estándar:
| Tipo | Tamaño de almacenamiento | Rango de valores | Precisión |
|---|---|---|---|
| float | 4 bytes | 1.2E-38 a 3.4E+38 | 6 dígitos significativos |
| double | 8 bytes | 2.3E-308 a 1.7E+308 | 15 dígitos significativos |
| long double | 16 bytes | 3.4E-4932 a 1.1E+4932 | 19 dígitos significativos |
El archivo de cabecera float.h define macros; en el programa se pueden usar estos valores y otros detalles sobre la representación binaria de números reales. El siguiente ejemplo mostrará el espacio de almacenamiento ocupado por los tipos de punto flotante y su rango de valores:
Ejemplo
%Ees para generar números reales de precisión simple y doble en forma exponencial, consulteFunciones de la biblioteca C - printf()。
Cuando compile y ejecute el programa anterior en Linux, producirá el siguiente resultado:
float 存储最大字节数 : 4 float 最小值: 1.175494E-38 float 最大值: 3.402823E+38 精度值: 6
Tipo void
El tipo void especifica que no hay valor disponible. Generalmente se usa en los siguientes tres casos:
| N.º | Tipo y descripción |
|---|---|
| 1 | Función sin valor de retorno En C hay varias funciones que no devuelven valor, o puede decir que devuelven vacío. El tipo de retorno de una función que no devuelve valor es vacío. Por ejemplovoid exit (int status); |
| 2 | Parámetro de función vacío En C hay varias funciones que no aceptan parámetros. Una función sin parámetros puede aceptar un void. Por ejemploint rand(void); |
| 3 | Puntero a void Un puntero de tipo void * representa la dirección de un objeto, no un tipo. Por ejemplo, la función de asignación de memoriavoid *malloc( size_t size );devuelve un puntero a void, que puede convertirse a cualquier tipo de datos. |
Si por ahora aún no puede comprender completamente el tipo void, no se preocupe demasiado; en los capítulos siguientes explicaremos estos conceptos en detalle.
Conversión de tipos
La conversión de tipos es convertir un valor de un tipo de datos a un valor de otro tipo de datos.
En el lenguaje C hay dos tipos de conversión:
-
Conversión implícita de tipos:La conversión implícita de tipos ocurre automáticamente en una expresión, sin necesidad de ninguna instrucción explícita o llamada a función. Normalmente convierte automáticamente un tipo más pequeño a un tipo más grande, por ejemplo, convertir el tipo int a long o float a double. La conversión implícita de tipos también puede causar pérdida de precisión o truncamiento de datos.
-
Conversión explícita de tipos:La conversión explícita de tipos requiere el operador de conversión forzada (type casting operator), que puede forzar un valor de un tipo de datos a otro tipo de datos. La conversión forzada permite al programador tener un control más preciso sobre el tipo de datos cuando sea necesario, pero también puede provocar pérdida o truncamiento de datos.
Ejemplo de conversión implícita de tipos:
Ejemplo
float f = 3.14;
double d = i + f; // Convierte implícitamente el tipo int a double
Ejemplo de conversión explícita de tipos:
Ejemplo
int i = (int)d; // Convierte explícitamente el tipo double a int
