C nos proporciona la característica de anidar una estructura dentro de otra estructura mediante la cual se crean tipos de datos complejos. Por ejemplo, es posible que necesitemos almacenar la dirección de un empleado de la entidad en una estructura. La dirección del atributo también puede tener subpartes como número de calle, ciudad, estado y código PIN. 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 la estructura en la estructura del empleado. Considere el siguiente programa.
#include struct address { char city[20]; int pin; char phone[14]; }; struct employee { char name[20]; struct address add; }; void main () { struct employee emp; printf('Enter employee information? '); scanf('%s %s %d %s',emp.name,emp.add.city, &emp.add.pin, emp.add.phone); printf('Printing the employee information.... '); printf('name: %s City: %s Pincode: %d Phone: %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); }
Producción
matriz.de java
Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890
La estructura se puede anidar de las siguientes maneras.
- Por estructura separada
- Por estructura integrada
1) estructura separada
Aquí creamos dos estructuras, pero la estructura dependiente debe usarse dentro de la estructura principal como miembro. Considere el siguiente ejemplo.
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; }emp1;
Como puede ver, doj (fecha de incorporación) es la variable de tipo Fecha. Aquí doj se utiliza como miembro en la estructura de empleados. De esta forma, podemos utilizar la estructura de fechas en muchas estructuras.
2) estructura integrada
La estructura incrustada nos permite declarar la estructura dentro de la estructura. Por lo tanto, requiere menos líneas de códigos pero no se puede utilizar en múltiples estructuras de datos. Considere el siguiente ejemplo.
struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }emp1;
Accediendo a la estructura anidada
Podemos acceder al miembro de la estructura anidada mediante Outer_Structure.Nested_Structure.member como se indica a continuación:
actriz zeenat aman
e1.doj.dd e1.doj.mm e1.doj.yyyy
Ejemplo de estructura anidada en C
Veamos un ejemplo sencillo de la estructura anidada en lenguaje C.
#include #include struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }e1; int main( ) { //storing employee information e1.id=101; strcpy(e1.name, 'Sonoo Jaiswal');//copying string into char array e1.doj.dd=10; e1.doj.mm=11; e1.doj.yyyy=2014; //printing first employee information printf( 'employee id : %d ', e1.id); printf( 'employee name : %s ', e1.name); printf( 'employee date of joining (dd/mm/yyyy) : %d/%d/%d ', e1.doj.dd,e1.doj.mm,e1.doj.yyyy); return 0; }
Producción:
employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014
Pasar de la estructura al funcionamiento
Al igual que otras variables, también se puede pasar una estructura a una función. Podemos pasar los miembros de la estructura a la función o pasar la variable de estructura a la vez. Considere el siguiente ejemplo para pasar la variable de estructura empleado a una función display() que se utiliza para mostrar los detalles de un empleado.
#include 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('Enter employee information? '); scanf('%s %s %d %s',emp.name,emp.add.city, &emp.add.pin, emp.add.phone); display(emp); } void display(struct employee emp) { printf('Printing the details.... '); printf('%s %s %d %s',emp.name,emp.add.city,emp.add.pin,emp.add.phone); }