logo

Geneste structuur in C

C biedt ons de mogelijkheid om de ene structuur binnen een andere structuur te nesten, door gebruik te maken van welke complexe gegevenstypen worden gemaakt. Het kan bijvoorbeeld nodig zijn dat we het adres van een medewerker van een entiteit in een structuur opslaan. Het attribuutadres kan ook de subonderdelen hebben als straatnummer, stad, staat en pincode. Om het adres van de werknemer op te slaan, moeten we dus het adres van de werknemer in een aparte structuur opslaan en het structuuradres in de structuurwerknemer nesten. Beschouw het volgende 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); } 

Uitvoer

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

De structuur kan op de volgende manieren worden genest.

  1. Door aparte structuur
  2. Door ingebedde structuur

1) Aparte structuur

Hier maken we twee structuren, maar de afhankelijke structuur moet als lid binnen de hoofdstructuur worden gebruikt. Beschouw het volgende voorbeeld.

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

Zoals u kunt zien, is doj (datum van toetreding) de variabele van het type Date. Hier wordt doj gebruikt als lid in de werknemersstructuur. Op deze manier kunnen we de datumstructuur in veel structuren gebruiken.

2) Ingebedde structuur

De ingebedde structuur stelt ons in staat de structuur binnen de structuur te declareren. Daarom vereist het minder regels codes, maar het kan niet in meerdere datastructuren worden gebruikt. Beschouw het volgende voorbeeld.

str.substring in Java
 struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }emp1; 

Toegang tot geneste structuur

We hebben toegang tot het lid van de geneste structuur via Outer_Structure.Nested_Structure.member, zoals hieronder weergegeven:

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

C Voorbeeld van geneste structuur

Laten we een eenvoudig voorbeeld bekijken van de geneste structuur in C-taal.

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

Uitgang:

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

Structuur doorgeven aan functioneren

Net als andere variabelen kan ook een structuur aan een functie worden doorgegeven. We kunnen de structuurleden doorgeven aan de functie of de structuurvariabele in één keer doorgeven. Beschouw het volgende voorbeeld om de structuurvariabele medewerker door te geven aan een functie display() die wordt gebruikt om de details van een medewerker weer te geven.

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