English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial básico de lenguaje C

Control de flujo de lenguaje C

Funciones en C

Arreglos en C

Punteros en C

Cadenas en C

Estructura de lenguaje C

Archivo de lenguaje C

C Otro

Manual de referencia de C

Estructuras anidadas en C

C nos proporciona la función de anidar una estructura dentro de otra, creando tipos de datos complejos. Por ejemplo, es posible que necesitemos almacenar la dirección del empleado en la estructura. Y la dirección también puede contener otras información, como el número de calle, la ciudad, el distrito y la contraseña. Por lo tanto, para almacenar la dirección del empleado, necesitamos almacenar la dirección del empleado en una estructura separada y anidar la dirección de esta estructura en la estructura del empleado. Vea el siguiente programa.

#include<stdio.h>
struct address 
{
    char city[20];
    int pin;
    char phone[14];
};
struct employee
{
    char name[20];
    struct address add;
};
void main ()
{
    struct employee emp;
    printf("Ingrese información del empleado?\n");
    scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);
    printf("Imprimir información del empleado...\n");
    printf("Nombre: %s\nCiudad: %s\nNúmero de P: %d\nTeléfono: %s", emp.name, emp.add.city, emp.add.pin, emp.add.phone);
}

Resultado de la salida

¿Introducir información del empleado?
Arun            
Delhi           
110001       
1234567890    
Imprimir información del empleado...   
Nombre: Arun      
Ciudad: Delhi  
Número: 110001
Teléfono: 1234567890

La estructura se puede anidar de la siguiente manera.

  1. A través de estructuras separadas

  2. A través de la estructura integrada

1)Estructuras separadas

Aquí, creamos dos estructuras, pero la estructura dependiente debe usarse como miembro dentro de la estructura principal. Vea el siguiente ejemplo.

struct Date
{
   int dd;
   int mm;
   int yyyy; 
};
struct Employee
{   
   int id;
   char name[20];
   struct Date doj;
}emp1;

Se puede ver que doj es una variable de tipo date. Aquí, doj se utiliza como miembro de la estructura Employee. De esta manera, podemos usar la estructura Date en muchas estructuras.

2)Estructura integrada

La estructura integrada nos permite declarar estructuras dentro de la estructura. Por lo tanto, requiere menos líneas de código, pero no se puede usar en múltiples estructuras de datos. Vea el siguiente ejemplo.

struct Employee
{   
   int id;
   char name[20];
   struct Date
    {
      int dd;
      int mm;
      int yyyy; 
    })doj;
}emp1;

Acceder a estructura anidad

Podemos acceder a los miembros de la estructura anidad mediante Outer_Structure.Nested_Structure.member, como se muestra a continuación:

e1.doj.dd
e1.doj.mm
e1.doj.yyyy

Ejemplo de estructura anidada en C

Veamos un ejemplo simple de estructura anidada en C.

#include<stdio.h>
#include<string.h>
struct Employee
{   
   int id;
   char name[20];
   struct Date
    {
      int dd;
      int mm;
      int yyyy; 
    })doj;
})e1;
int main(
{
   //Almacenar información del empleado
   e1.id =101;
   strcpy(e1.name, "Sonoo Jaiswal");//Copiar cadena a arreglo de caracteres
   e1.doj.dd =10;
   e1.doj.mm =11;
   e1.doj.yyyy =2014;
   //Imprimir información del primer empleado
   printf("ID del empleado : %d\n", e1.id);
   printf("Nombre del empleado : %s\n", e1.name);
   printf("Fecha de incorporación del empleado (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd,e1.doj.mm,e1.doj.yyyy);
   return 0;
}

Salida:

ID del empleado : 101
Nombre del empleado : Seagull Ali
Fecha de incorporación del empleado (dd/mm/yyyy) : 10/11/2014

Pasar estructura a función

Al igual que otras variables, las estructuras también se pueden pasar a las funciones. Podemos pasar los miembros de la estructura a las funciones, o pasar la variable de estructura completa. El siguiente ejemplo pasa la variable de estructura employee a la función display(), que se utiliza para mostrar los detalles del empleado.

#include<stdio.h>
struct address 
{
    char city[20];
    int pin;
    char phone[14];
};
struct employee
{
    char name[20];
    struct address add;
};
void display(struct employee);
void main ()
{
    struct employee emp;
    printf("Ingrese información del empleado?\n");
    scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone);
    display(emp);
}
void display(struct employee emp)
{
  printf("Imprimir información del empleado.....\n");
  printf("%s %s %d %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone);
}