Estas en: gratiszona > apuntes > lenguaje c

estructuras en el lenguaje c

Las estructuras ya estaban presentes en el lenguaje C. Hay quien las ve como una clase, pero sin metodos (solo almacena datos).

Supongamos que queremos hacer una agenda con los numeros de telefono de nuestros amigos. Necesitariamos un array de Cadenas para almacenar sus nombres, otro para sus apellidos y otro para sus numeros de telefono. Esto puede hacer que el programa quede desordenado y dificil de seguir. Y aqui es donde vienen en nuestro auxilio las estructuras.

Para definir una estructura usamos el siguiente formato:

struct nombre_de_la_estructura {
campos de estructura;
};

NOTA: Es importante no olvidar el ';' del final.

Vamos a crear una declaracion de estructura llamada amigo:

struct estructura_amigo {
char nombre[30];
char apellido[40];
char telefono[10];
char edad;
};

A cada elemento de esta estructura (nombre, apellido, telefono) se le llama campo o miembro.

Una vez definida la estructura, podemos usarla declarando una variable con esa estructura:

struct estructura_amigo amigo;

Ahora la variable amigo es de tipo estructura_amigo. Para acceder al nombre de amigo usamos: amigo.nombre.

Arrays de estructuras

Supongamos ahora que queremos guardar la informacion de varios amigos. Con una variable de estructura solo podemos guardar los datos de uno. Necesitamos declarar arrays de estructuras:

struct estructura_amigo amigo[10];

Ahora necesitamos saber como acceder a cada elemento del array. La variable definida es amigo, por lo tanto para acceder al primer elemento usaremos amigo[0] y a su miembro nombre: amigo[0].nombre.

Inicializar una estructura

Primero se define la estructura y luego al declarar una variable como estructura le damos el valor inicial que queramos. Ejemplo:

struct estructura_amigo amigo = {
"Juanjo"
"Lopez"
"592-0483"
30
};

Por supuesto hemos de meter en cada campo el tipo de datos correcto.

Punteros a estructuras

Primero hay que definir la estructura igual que antes, pero al declarar la variable de tipo estructura debemos ponerle el operador '*' para indicarle que es un puntero.

Es importante recordar que un puntero no debe apuntar a un lugar cualquiera, debemos darle una direccion valida donde apuntar. No podemos por ejemplo crear un puntero a estructura y meter los datos directamente mediante ese puntero, no sabemos donde apunta el puntero y los datos se almacenarian en un lugar cualquiera.

Y para comprender como funcionan nada mejor que un ejemplo. Este programa utiliza un puntero para acceder a la informacion de la estructura:

#include <stdio.h>
struct estructura_amigo {
char nombre[30];
char apellido[40];
char telefono[10];
int edad;
};
struct estructura_amigo amigo = {
"Juanjo"
"Lopez"
"592-0483"
30
};
struct estructura_amigo *p_amigo;
int main()
{
p_amigo = &amigo;
printf("%s tiene ", p_amigo->apellido );
printf("%i años ", p_amigo->edad );
printf("y su telefono es el %s.\n" , p_amigo->telefono );
}

p_amigo es un puntero a la estructura estructura_amigo. Dado que es un puntero tenemos que indicarle donde debe apuntar, en este caso vamos a hacer que apunte a la variable amigo:

 p_amigo = &amigo;

El operador & que significa 'dame la direccion donde esta almacenado...'.

Para acceder a cada campo de la estructura antes lo haciamos usando el operador '.', pero, como muestra el ejemplo, si se trabaja con punteros se debe usar el operador '->'.

Punteros a arrays de estructuras

Por supuesto tambien podemos usar punteros con arrays de estructuras.

Paso de estructuras a funciones

Las estructuras se pueden pasar directamente a una funcion igual que haciamos con las variables. Ejemplo:

int suma(struct estructura_amigo arg_amigo ) {

return arg_amigo.edad+20;

}


Anterior: funciones
Siguiente: clases

· Introduccion al lenguaje c
· Tipos en el lenguaje c
· Variables y constantes en el lenguaje c
· Operadores en el lenguaje c
· Entrada/salida en el lenguaje c
· Estructuras de control en el lenguaje c
· Arrays y punteros en el lenguaje c
· Reserva dinamica de memoria en el lenguaje c
· Funciones en el lenguaje c
· Estructuras en el lenguaje c
· Clases
· Clases y encapsulacion en el lenguaje c
· Constructores y destructores en el lenguaje c++
· Descomposicion en modulos en el lenguaje c
· Array de objetos en el lenguaje c
· Clases static en lenguaje c
· Un objeto con un puntero interno
· Punteros a clases en c
· Objetos encadenados en c
· Sobrecarga de operadores en el lenguaje c


IMPORTANTE:

- Si te ha gustado esta pagina, por favor, votanos aqui:

- Si no te ha gustado, escribenos y cuentanos en que mejorar.

Actualizado: 15/10/2014
Contactar