En el capítulo sobre variables, vimos los tipos de datos primitivos. Sin embargo.alto nivelLos tipos de datos nos dan más flexibilidad a la hora de gestionar los datos de nuestros programas.
marco
Las estructuras son tipos de datos formados por variables de otros tipos de datos (que pueden incluir otras estructuras). Sirven para agrupar información en unidades significativas y permiten construcciones que de otro modo no serían posibles. Las variables declaradas en una estructura se denominan "miembros". Una variable declarada mediante el métodostructLas palabras clave definen la estructura. Ejemplo:
struct mystruct {
int miembro_int ;
double miembro ;
char cadena_miembro [ 25 ]; }
} struct_var ;
struct_vares una variable de tipostruct mystructEstamos trabajando con el nuevostruct mystructLos tipos de datos se declaran junto con la definición del tipo de datos. Más comúnmente, las variables struct se declaran después de la definición de la estructura, utilizando la siguiente forma:
struct mystruct struct_var ;
Es práctica común crear unsinónimos tipo.De esta forma no tenemos que estar escribiendo "struct mystruct".typedefpara conseguirlo, que aliasa el tipo:
typedef struct {
// ...
} Mystruct.
itstructes undesigual(debido a la falta de un nombre en la primera línea), pero tiene el aliasMystruct. A continuación, se puede utilizar lo siguiente:
Mystruct_var ;
Si la variable struct es un puntero, puede utilizar el operador de acceso a miembros.(punto) u operadores de acceso indirecto a los miembros->(Flecha) Accede a los miembros de la variable struct:
struct_var . int_member = 0 ; struct_var - > int_number = 0 ; // Esta sentencia es equivalente a: * struct_var.int_number = 0;
Las estructuras pueden contener no sólo variables de otras estructuras, sino también las suyas propias. Esto permite definiciones recursivas y es muy potente cuando se utiliza con punteros:
struct pedido_restaurante {
char descripción [ 100 ];
Duplica el precio.
struct restaurant_order * next_order ;
}; }
Esta es una implementación de la estructura de datos de tabla encadenada. Cada nodo (orden restaurante) apunta a otro nodo. La lista enlazada termina en susiguiente_pedidoEl último nodo al que se asignará la variable (en nuestro ejemplo, será el último del orden).NULL.
Las definiciones de estructuras recursivas pueden resultar complicadas cuando se utiliza la funcióntypedef. Al utilizar definiciones de alias, no es posible declarar variables estructurales en su propio tipo, porque en la sentencia de cálculotypedefAntes no existía la definición de aliastypedef::
typedef struct Mystruct {
// ...
struct Mystruct * puntero ; // Mystruct * puntero; provoca un error de compilación.
} Mystruct.
El tamaño de un tipo de estructura es igual a la suma de los tamaños de todos sus miembros.
sindicatos
La definición de unión es similar a la definición de estructura. La diferencia entre ambas es que en una struct, los miembros ocupan áreas de memoria diferentes, pero en una unión, los miembros ocupan la misma área de memoria. Así, en los siguientes tipos, por ejemplo:
unir {
int i ;
double d ;- { i ;- i ;- i
} ü ;
Los programadores pueden acceder a cualquieru.ital vezu.dpero no al mismo tiempo. Dado que elu.iademásu.docupan la misma zona de memoria, y la modificación de uno modifica el valor del otro, a veces de forma impredecible.
El tamaño de un sindicato es el de su mayor miembro.
enumeración
Las enumeraciones son tipos de datos artificiales que representan asociaciones entre etiquetas y números enteros. A diferencia de las estructuras o las uniones, no se componen de otros tipos de datos. Una declaración de ejemplo:
enumeración Color {
Rojo.
Naranja.
Amarillo.
Verde
Cian
Azul.
Morado.
} crayon_colour ;
En el ejemplo anterior, rojo es igual a 0, naranja es igual a 1, ... por lo que cada etiqueta subsiguiente es 1 mayor que la anterior.Se pueden especificar valores para etiquetas en el rango de enteros, pero deben ser texto.
La sintaxis de declaración similar que se aplica a las estructuras y uniones también se aplica a las enumeraciones. Además, la sintaxisen generalNo es necesario centrarse en el número entero representado por la etiqueta:
enum tiempo tiempo_fuera = lluvia ;
Esta propiedad única hace que las enumeraciones sean especialmente útiles en las sentencias switch-case:
enum Tiempo {
Soleado.
ventoso
nublado
lluvioso.
} weather_outside ;
// ...
interruptor (tiempo_fuera) {
caso soleado :
wear_sunglasses ().
smash;
caso ventoso :
wear_windbreaker ()
smash;
caso nublado :
get_umbrella ().
smash;
caso lluvia :
get_umbrella (); wear_raincoat ()
wear_raincoat ().
smash;
}
Supongo que quieres leer:Programación en C. C intermedio" 2. Punteros y matrices



