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) Окрема структура
Тут ми створюємо дві структури, але залежну структуру слід використовувати всередині основної структури як член. Розглянемо наступний приклад.
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); }