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.
- Door aparte structuur
- 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); }