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 كعضو في هيكل الموظف. بهذه الطريقة، يمكننا استخدام بنية التاريخ في العديد من الهياكل.

2) الهيكل المضمن

تمكننا البنية المضمنة من إعلان البنية داخل البنية. ومن ثم، فهو يتطلب سطرًا أقل من الرموز ولكن لا يمكن استخدامه في هياكل بيانات متعددة. النظر في المثال التالي.

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

الوصول إلى البنية المتداخلة

يمكننا الوصول إلى عضو البنية المتداخلة عن طريق Outer_Structure.Nested_Structure.member كما هو موضح أدناه:

البرمجة في صفائف C
 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 

تمرير الهيكل إلى الوظيفة

تمامًا مثل المتغيرات الأخرى، يمكن أيضًا تمرير البنية إلى دالة. يمكننا تمرير أعضاء البنية إلى الوظيفة أو تمرير متغير البنية مرة واحدة. خذ بعين الاعتبار المثال التالي لتمرير متغير البنية الموظف إلى عرض الوظيفة () والذي يستخدم لعرض تفاصيل الموظف.

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