logo

Struttura annidata in C

C ci fornisce la funzionalità di annidare una struttura all'interno di un'altra struttura utilizzando la quale vengono creati tipi di dati complessi. Ad esempio, potremmo aver bisogno di memorizzare l'indirizzo di un dipendente dell'entità in una struttura. L'indirizzo dell'attributo può anche contenere sottoparti come numero civico, città, stato e codice PIN. Pertanto, per memorizzare l'indirizzo del dipendente, dobbiamo memorizzare l'indirizzo del dipendente in una struttura separata e annidare l'indirizzo della struttura nella struttura dipendente. Consideriamo il seguente programma.

 #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); } 

Produzione

 Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890 

La struttura può essere nidificata nei seguenti modi.

  1. Per struttura separata
  2. Per struttura incorporata

1) Struttura separata

Qui creiamo due strutture, ma la struttura dipendente dovrebbe essere utilizzata all'interno della struttura principale come membro. Considera il seguente esempio.

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

Come puoi vedere, doj (data di adesione) è la variabile di tipo Date. Qui doj viene utilizzato come membro nella struttura Employee. In questo modo, possiamo utilizzare la struttura della data in molte strutture.

2) Struttura incorporata

La struttura incorporata ci consente di dichiarare la struttura all'interno della struttura. Pertanto, richiede meno righe di codice ma non può essere utilizzato in più strutture dati. Considera il seguente esempio.

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

Accesso alla struttura nidificata

Possiamo accedere al membro della struttura nidificata tramite Outer_Structure.Nested_Structure.member come indicato di seguito:

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

C Esempio di struttura nidificata

Vediamo un semplice esempio della struttura annidata in linguaggio 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; } 

Produzione:

 employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014 

Passaggio della struttura alla funzione

Proprio come le altre variabili, anche una struttura può essere passata a una funzione. Possiamo passare i membri della struttura alla funzione o passare la variabile della struttura contemporaneamente. Considera l'esempio seguente per passare la variabile di struttura impiegato a una funzione display() che viene utilizzata per visualizzare i dettagli di un dipendente.

 #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); }