C מספק לנו את התכונה של קינון מבנה אחד בתוך מבנה אחר באמצעותו נוצרים סוגי נתונים מורכבים. לדוגמה, ייתכן שנצטרך לאחסן את הכתובת של עובד ישות במבנה. כתובת התכונה עשויה לכלול גם את חלקי המשנה כמספר רחוב, עיר, מדינה וקוד PIN. מכאן שכדי לאחסן את כתובת העובד, עלינו לאחסן את כתובת העובד במבנה נפרד ולקנן את כתובת המבנה בעובד המבנה. שקול את התוכנית הבאה.
#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 משמש כחבר במבנה העובד. בדרך זו, נוכל להשתמש במבנה תאריך במבנים רבים.
2) מבנה מוטבע
המבנה המוטבע מאפשר לנו להכריז על המבנה בתוך המבנה. לפיכך, זה דורש פחות שורת קודים אך לא ניתן להשתמש בו במבני נתונים מרובים. שקול את הדוגמה הבאה.
arraylist ממוין java
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
העברת מבנה לתפקוד
בדיוק כמו משתנים אחרים, ניתן להעביר גם מבנה לפונקציה. אנו עשויים להעביר את איברי המבנה לפונקציה או להעביר את משתנה המבנה בבת אחת. שקול את הדוגמה הבאה כדי להעביר את משתנה המבנה עובד לפונקציה 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); }