English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تقدم لنا لغة C الخاصية التي تتيح لنا إدراج بنية داخل بنية أخرى، مما يتيح إنشاء أنواع بيانات معقدة. على سبيل المثال، قد نحتاج إلى تخزين عنوان الموظف في بنية. يمكن أن تحتوي العنوان أيضًا على معلومات أخرى مثل رقم الشارع، والمدينة، والمنطقة والكلمة المرور. لذا، لتخزين عنوان الموظف، نحتاج إلى تخزين عنوان الموظف في بنية منفصلة، وإدراج عنوان هذه البنية في بنية الموظف. انظر إلى البرنامج أدناه.
#include<stdio.h> struct address { char city[20]; int pin; char phone[14]; }; struct employee { char name[20]; struct address add; }; void main () { struct employee emp; printf("输入员工信息?\n"); scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone); printf("طباعة معلومات الموظف...\n"); printf("الاسم: %s\nالمدينة: %s\nرقم P: %d\nالهاتف: %s", emp.name, emp.add.city, emp.add.pin, emp.add.phone); {}
نتيجة الخروج
إدخال معلومات الموظف? Arun Delhi 110001 1234567890 طباعة معلومات الموظف... الاسم: Arun المدينة: Delhi الرقم: 110001 الهاتف: 1234567890
يمكن للبنية أن تتدرج كما يلي.
من خلال بنية منفصلة
من خلال بنية الإدراج
في هذا السياق، قمنا بإنشاء بنيتين، ولكن بنية التبعية يجب أن تستخدم كعضو داخل بنية الرئيسية. انظر إلى مثال أدناه.
struct Date { int dd; int mm; int yyyy; }; struct Employee { int id; char name[20]; struct Date doj; };emp1;
يمكننا رؤية أن doj هو متغير من النوع date. هنا، يتم استخدام doj كعضو في بنية Employee. بهذه الطريقة، يمكننا استخدام بنية Date في العديد من البنيات.
بنية الإدراج تسمح لنا بتعريف بنية داخل بنية. لذلك، تحتاج إلى عدد أقل من سطور البرنامج، ولكن لا يمكن استخدامها في بنيات بيانات متعددة. انظر إلى مثال أدناه.
struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; };emp1;
يمكننا الوصول إلى عضو بنية النested Structure من Outer Structure.Nested Structure.member، كما هو موضح أدناه:
e1.doj.dd e1.doj.mm e1.doj.yyyy
دعونا نرى مثالاً بسيطاً لنموذج الهياكل المدمجة في لغة C.
#include<stdio.h> #include<string.h> struct Employee { int id; char name[20]; struct Date { int dd; int mm; int yyyy; }doj; }e1; int main ( { //تخزين معلومات الموظف e1.id=101; strcpy(e1.name, "Sonoo Jaiswal"); // نسخ النص إلى مصفوفة الحروف e1.doj.dd=10; e1.doj.mm=11; e1.doj.yyyy=2014; //طباعة معلومات الموظف الأول printf("معرف الموظف : %d\n", e1.id); printf("اسم الموظف : %s\n", e1.name); printf("تاريخ انضمام الموظف (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd,e1.doj.mm,e1.doj.yyyy); return 0; {}
الناتج:
معرف الموظف : 101 اسم الموظف : Seagull Ali تاريخ انضمام الموظف (dd/mm/yyyy) : 10/11/2014
كما هو الحال في المتغيرات الأخرى، يمكن نقل الهياكل إلى الدوال. يمكن نقل أعضاء الهيكل إلى الدالة، أو يمكن نقل هيكل متغير مرة واحدة. في هذا المثال، سيتم نقل هيكل متغير employee إلى دالة display()، والتي تستخدم لعرض تفاصيل الموظف.
#include<stdio.h> 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("输入员工信息?\n"); scanf("%s %s %d %s",emp.name,emp.add.city, &emp.add.pin, emp.add.phone); display(emp); {} void display(struct employee emp) { printf("طباعة معلومات الموظف.....\n"); printf("%s %s %d %s",emp.name,emp.add.city,emp.add.pin,emp.add.phone); {}