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