English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي لغة C

تحكم في عملية لغة C

الوظائف في لغة C

المساحات في لغة C

المراجع في لغة C

السلاسل في لغة C

بنيات لغة C

ملفات لغة C

C أخرى

دليل لغة C

بنية مضمنة في لغة C

تقدم لنا لغة 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

يمكن للبنية أن تتدرج كما يلي.

  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;

الوصول إلى بنية النested

يمكننا الوصول إلى عضو بنية النested Structure من Outer Structure.Nested Structure.member، كما هو موضح أدناه:

e1.doj.dd
e1.doj.mm
e1.doj.yyyy

مثال نموذج الهياكل المدمجة في C

دعونا نرى مثالاً بسيطاً لنموذج الهياكل المدمجة في لغة 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);
{}