Las estructuras en C son colecciones de variables relacionadas bajo un mismo nombre. Se definen con un identificador y miembros, y se declaran, inicializan y acceden a sus miembros. También se pueden anidar estructuras y crear estructuras autoreferenciadas mediante apuntadores.
2. ¿Qué son las estructuras?
Una colección de variables
relacionadas bajo el mismo
nombre
Son tipos de datos derivados,
están construidas a partir de
variables de otros tipos
15/02/12 Programación avanzada y métodos numéricos 2
3. Definición
Identificador o rótulo
struct alumno {
char nombre[20];
int edad; Miembros
float estatura;
};
15/02/12 Programación avanzada y métodos numéricos 3
4. Declaración, inicialización y acceso
struct alumno x; // Declaración
struct alumno y = { “Jimena”, 22,
1.67}; // Inicialización
x.edad = 21; // Acceso
float a = y.estatura;
15/02/12 Programación avanzada y métodos numéricos 4
5. Copiar datos de una estructura a otra
struct alumno x; // Estructura vacía
struct alumno y = {“Jimena”, 22, 1.67};
x = y;
/* La siguiente línea imprimirá el nombre
Jimena */
printf(“Dato en x: %s”, x.nombre);
15/02/12 Programación avanzada y métodos numéricos 5
6. Apuntadores a estructuras
struct alumno *ap_x; // Apuntador
ap_x = &x; // Asignamos la dirección de x
/* Para acceder a un miembro desde un
apuntador, usamos una flecha -> */
ap_x->edad = 45;
printf(“Miembro edad de estructura x:
%d”,ap_x->edad); // imprime 45
15/02/12 Programación avanzada y métodos numéricos 6
7. Estructuras anidadas
struct tarea {
struct alumno autor; // estructura
anidada
int calificacion;
} tarea_x; // Se puede declarar al final de la
definición
15/02/12 Programación avanzada y métodos numéricos 7
8. Estructuras anidadas
/* Para acceder a una estructura interna, hay
que hacerlo en orden */
tarea_x.autor.edad = 45;
printf(“Autor de la tarea: %s”,
tarea_x.autor.nombre);
15/02/12 Programación avanzada y métodos numéricos 8
9. Estructuras anidadas
/* Para acceder a una estructura interna, hay
que hacerlo en orden */
tarea_x.autor.edad = 45;
printf(“Autor de la tarea: %s”,
tarea_x.autor.nombre);
15/02/12 Programación avanzada y métodos numéricos 9
10. Estructuras autoreferenciadas
struct nodo {
int dato;
struct nodo *anterior; // apuntador al
mismo tipo de estructura
struct nodo *siguiente;
};
15/02/12 Programación avanzada y métodos numéricos 10
11. Estructuras autoreferenciadas
struct nodo nodo1, nodo2;
nodo1.dato = -5;
nodo1.siguiente = &nodo2; // asignamos
dirección de memoria
nodo2.dato = 67;
nodo2.anterior = &nodo1;
printf(“Dato del nodo anterior a 2: %i”,
nodo2.anterior->dato);
15/02/12 Programación avanzada y métodos numéricos 11
12. Bibliografía
Deitel, H. Y Deitel, P. Cómo
programar en C. Prentice Hall.
15/02/12 Programación avanzada y métodos numéricos 12