C tarjoaa meille ominaisuuden sijoittaa yksi rakenne toiseen rakenteeseen, jonka avulla luodaan monimutkaisia tietotyyppejä. Saatamme esimerkiksi joutua tallentamaan entiteetin työntekijän osoitteen rakenteeseen. Attribuutin osoitteessa voi myös olla alaosat katunumero, kaupunki, osavaltio ja PIN-koodi. Näin ollen työntekijän osoitteen tallentamiseksi meidän on tallennettava työntekijän osoite erilliseen rakenteeseen ja sijoitettava rakenteen osoite rakenteen työntekijään. Harkitse seuraavaa ohjelmaa.
#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); }
Lähtö
puhdista npm-välimuisti
Enter employee information? Arun Delhi 110001 1234567890 Printing the employee information.... name: Arun City: Delhi Pincode: 110001 Phone: 1234567890
Rakenne voidaan upottaa seuraavilla tavoilla.
- Erillisen rakenteen mukaan
- Sulautetun rakenteen mukaan
1) Erillinen rakenne
Tässä luomme kaksi rakennetta, mutta riippuvaista rakennetta tulisi käyttää päärakenteen sisällä jäsenenä. Harkitse seuraavaa esimerkkiä.
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; }emp1;
Kuten näet, doj (liittymispäivä) on muuttuja, jonka tyyppi on Date. Tässä doj:ta käytetään jäsenenä työntekijärakenteessa. Tällä tavalla voimme käyttää Date-rakennetta monissa rakenteissa.
2) Upotettu rakenne
Upotettu rakenne mahdollistaa rakenteen ilmoittamisen rakenteen sisällä. Siksi se vaatii vähemmän koodiriviä, mutta sitä ei voida käyttää useissa tietorakenteissa. Harkitse seuraavaa esimerkkiä.
struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }emp1;
Sisäkkäisen rakenteen käyttäminen
Voimme käyttää sisäkkäisen rakenteen jäsentä käyttämällä Outer_Structure.Nested_Structure.member, kuten alla:
poista npm-välimuisti
e1.doj.dd e1.doj.mm e1.doj.yyyy
C Sisäkkäisen rakenteen esimerkki
Katsotaanpa yksinkertainen esimerkki sisäkkäisestä rakenteesta C-kielellä.
#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; }
Lähtö:
employee id : 101 employee name : Sonoo Jaiswal employee date of joining (dd/mm/yyyy) : 10/11/2014
Rakenteen siirtäminen toimintaan
Kuten muutkin muuttujat, myös rakenne voidaan välittää funktiolle. Voimme siirtää rakenneosat funktioon tai siirtää rakennemuuttujan kerralla. Harkitse seuraavaa esimerkkiä siirtääksesi työntekijän rakennemuuttujan funktiolle display(), jota käytetään työntekijän tietojen näyttämiseen.
#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); }