logo

Kapslad struktur i C

C ger oss funktionen att kapsla en struktur i en annan struktur genom att använda vilka komplexa datatyper skapas. Till exempel kan vi behöva lagra adressen till en enhetsanställd i en struktur. Attributadressen kan också ha underdelarna som gatunummer, stad, stat och pinkod. Därför, för att lagra adressen till den anställde, måste vi lagra adressen till den anställde i en separat struktur och kapsla strukturadressen i strukturanställda. Tänk på följande program.

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

Produktion

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

Strukturen kan kapslas på följande sätt.

  1. Genom separat struktur
  2. Efter inbäddad struktur

1) Separat struktur

Här skapar vi två strukturer, men den beroende strukturen ska användas inuti huvudstrukturen som medlem. Betrakta följande exempel.

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

Som du kan se är doj (datum för anslutning) variabeln av typen Date. Här används doj som medlem i Medarbetarstruktur. På så sätt kan vi använda Datumstruktur i många strukturer.

2) Inbäddad struktur

Den inbäddade strukturen gör det möjligt för oss att deklarera strukturen inuti strukturen. Därför kräver det mindre rad med koder men det kan inte användas i flera datastrukturer. Betrakta följande exempel.

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

Åtkomst till kapslad struktur

Vi kan komma åt medlemmen av den kapslade strukturen av Outer_Structure.Nested_Structure.member enligt nedan:

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

C Exempel på kapslad struktur

Låt oss se ett enkelt exempel på den kapslade strukturen i C-språk.

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

Produktion:

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

Passerar struktur för att fungera

Precis som andra variabler kan en struktur också skickas till en funktion. Vi kan skicka strukturelementen till funktionen eller skicka strukturvariabeln på en gång. Betrakta följande exempel för att skicka strukturvariabeln anställd till en funktion display() som används för att visa detaljer om en anställd.

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