C nodrošina iespēju ligzdot vienu struktūru citā struktūrā, ar kuras palīdzību tiek izveidoti sarežģīti datu tipi. Piemēram, mums var būt nepieciešams saglabāt entītijas darbinieka adresi struktūrā. Atribūta adresei var būt arī tādas apakšdaļas kā ielas numurs, pilsēta, valsts un PIN kods. Tādējādi, lai saglabātu darbinieka adresi, mums ir jāsaglabā darbinieka adrese atsevišķā struktūrā un struktūras adrese jāievieto struktūras darbiniekā. Apsveriet šādu programmu.
#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); }
Izvade
json formāta piemērs
Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890
Struktūru var ligzdot šādos veidos.
- Pēc atsevišķas struktūras
- Pēc iegultās struktūras
1) Atsevišķa struktūra
Šeit mēs izveidojam divas struktūras, bet atkarīgā struktūra ir jāizmanto galvenās struktūras iekšpusē kā dalībnieks. Apsveriet šādu piemēru.
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; }emp1;
Kā redzat, doj (pievienošanās datums) ir Datuma tipa mainīgais. Šeit doj tiek izmantots kā darbinieku struktūras dalībnieks. Tādā veidā mēs varam izmantot datuma struktūru daudzās struktūrās.
2) Iegultā struktūra
Iegultā struktūra ļauj mums deklarēt struktūru struktūras iekšpusē. Tādējādi tam ir nepieciešams mazāk kodu rindu, taču to nevar izmantot vairākās datu struktūrās. Apsveriet šādu piemēru.
struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }emp1;
Piekļuve ligzdotajai struktūrai
Mēs varam piekļūt ligzdotās struktūras dalībniekam, izmantojot Outer_Structure.Nested_Structure.member, kā norādīts tālāk:
c formatēta virkne
e1.doj.dd e1.doj.mm e1.doj.yyyy
C Ligzdotas struktūras piemērs
Apskatīsim vienkāršu ligzdotās struktūras piemēru C valodā.
#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; }
Izvade:
employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014
Struktūras nodošana funkcionēšanai
Tāpat kā citus mainīgos, struktūru var arī nodot funkcijai. Mēs varam nodot struktūras elementus funkcijai vai nodot struktūras mainīgo uzreiz. Apsveriet šo piemēru, lai nosūtītu struktūras mainīgo darbinieks funkcijai display(), ko izmanto, lai parādītu informāciju par darbinieku.
#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); }