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 (дата приєднання) є змінною типу Date. Тут doj використовується як член структури Employee. Таким чином ми можемо використовувати структуру Date у багатьох структурах.

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