logo

Вложена структура в C

C ни предоставя функцията за влагане на една структура в друга структура, чрез която се създават сложни типове данни. Например, може да се наложи да съхраним адреса на служител на предприятие в структура. Адресът на атрибута може също да има подчасти като номер на улица, град, щат и ПИН код. Следователно, за да съхраним адреса на служителя, трябва да съхраним адреса на служителя в отделна структура и да вложим адреса на структурата в структурата служител. Помислете за следната програма.

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

Изход

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

Структурата може да бъде вложена по следните начини.

  1. По отделна структура
  2. Чрез вградена структура

1) Отделна структура

Тук създаваме две структури, но зависимата структура трябва да се използва вътре в основната структура като член. Помислете за следния пример.

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

Както можете да видите, doj (дата на присъединяване) е променлива от тип Дата. Тук doj се използва като член в структурата на служителите. По този начин можем да използваме структурата на датата в много структури.

2) Вградена структура

Вградената структура ни позволява да декларираме структурата вътре в структурата. Следователно, той изисква по-малко редове от кодове, но не може да се използва в множество структури от данни. Помислете за следния пример.

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

Достъп до вложена структура

Можем да осъществим достъп до члена на вложената структура чрез Outer_Structure.Nested_Structure.member, както е дадено по-долу:

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

C Пример за вложена структура

Нека видим прост пример за вложена структура в езика C.

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

Изход:

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

Предаване на структура към функциониране

Точно както другите променливи, структурата може да бъде предадена на функция. Можем да предадем членовете на структурата във функцията или да предадем структурната променлива наведнъж. Разгледайте следния пример, за да предадете структурната променлива employee на функция display(), която се използва за показване на подробности за служител.

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