Estructuras
La forma general de una definición de estructura es:
struct etiqueta {
tipo nombre_variable;
tipo nombre_variable;
.............................
.............................
} variables _de_estructura
Ejemplo:
struct dir {
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
unsigned long int codigo;
} info_dir;
A los elementos individuales de la estructura se hace referencia utilizando . (punto).
Ejemplo:
info_dir.codigo = 12345;
Forma general es: nombre_estructura.elemento
Una estructura puede inicializarse igual que los vectores:
struct familia {
char apellido[10];
char nombrePadre[10];
char nombreMadre[10];
int numerohijos;
} fam1={"Garcia","Juan","Maria",7};
Arrays de estructuras
Se define primero la estructura y luego se declara una variable array de dicho tipo.
Ejemplo:
struct dir info_dir [100];
Para acceder a una determinada estructura se indexa el nombre de la estructura:
info_dir [2].codigo = 12345;
Paso de estructuras a funciones
Cuando se utiliza una estructura como argumento de una función, se pasa la estructura íntegra mediante el uso del método estándar de llamada por valor.
Ejemplo:
struct tipo_estructura {
int a,b;
char c;
};
void f1 (struct tipo_estructura param);
main ( )
{
struct tipo_estructura arg;
arg.a = 1000;
f1(arg);
return 0;
}
void f1 (struct tipo_estructura param)
{
printf ("%d",param.a);
}
Punteros a estructuras
Declaración: struct dir * pruntero_dir;
Existen dos usos principales de los punteros a estructuras:
1) para pasar la dirección de una estructura a una función.
2) para crear listas enlazadas y otras estructuras de datos dinámicas.
Para encontrar la dirección de una variable de estructura se coloca & antes del nombre de la estructura.
Ejemplo:
struct bal {
float balance;
char nombre[80];
} persona;
struct bal *p;
p = &persona; (coloca la dirección de la estructura persona en el puntero p)
No podemos usar el operador punto para acceder a un elemento de la estructura a través del puntero a la estructura. Debemos utilizar el operador flecha ->
p -> balance
Tipo enumerado
enum identificador {lista de constantes simbólicas};
Ejemplo: enum arcoiris {rojo, amarillo, verde, azul, blanco};
(realmente asigna rojo=0, amarillo=1, ...)
printf ("%d %d", rojo, verde); imprime 0 2 en pantalla
Podemos especificar el valor de uno o más símbolos utilizando un inicializador. Lo hacemos siguiendo el símbolo con un signo igual y un valor entero.
enum moneda {penique, niquel, diez_centavos, cuarto=100, medio_dolar, dolar};
Los valores son: penique 0, niquel 1, diez_centavos 2, cuarto 100, medio_dolar 101, dolar 102