Una estructura pensalo como un conjunto de variables/struct/union agrupadas en un nombre..
Esta es una definicion de estructura, no ocupa espacio, no define un nuevo tipo, simplemente dice que My_Struct posee 2 variables dentro.
struct My_Struct {
int Var1;
char Var2;
}
Para crear una estructura en memoria termino declarando una
struct My_Struct MiConjunto;
Ahora MiConjunto son esas 2 variables. Como un contenedor. ¿Pero si en ves de una variable tengo un struct? Es lo mismo, en ves de reservar el espacio para una sola variable, reserva el espacio de lo que ocuparia la estructura.
En el codigo que pase use typedef para no repetir la palabra struct ( Como en el ejemplo anterior )
typedef struct {
char texto[30];
int tipo;
} texto_t;
typedef struct{
texto_t nombre;
texto_t direccion;
}alumno;
Entonces este codigo me dice que... texto_t es una estructura con 2 variables, un array de 30 char y un int. Luego alumno son 2 estructuras de estas.
Si hicieramos un mapa completo de lo que seria al crear una estructura alumnos seria algo asi:
MiEstructura contiene:
Una estructura tipo texto_t: nombre, a su ves esta posee un array de 30 char y un int
Una estructura tipo texto_t: direccion, a su ves esta posee un array de 30 char y un int
Si lo vieramos en memoria seria algo asi:
Array 30 char ------- Esto se accede con "nombre"
int-------------------------|
Array 30 char------------------\
int------------------------------------ Esto se accede con "direccion"
(Todo eso corresponde a MiEstructura)
Entonces tenemos que MiEstructura es un struct, si quiero acceder a un elemento lo hago con el punto, los elementos son 2 struct, nombre y direccion, si quiero acceder a uno de esos elementos uso el punto de nuevo. Ejemplo
MiEstructura.nombre.tipo;
En el ejemplo se pasa los punteros a las estructuras nombre o direccion... estas poseen 2 campos como vimso con anterioridad, como se pasa el puntero se usa el -> y tenes los 2 variables de esa estructura que son texto y tipo