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

دليل تعليمي الأساسيات في C

تحكم في تدفق C

وظائف لغة C

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

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

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

بنية التركيب في C

ملفات C

C أخرى

دليل مرجع C

الجمعيات (Union) في لغة C

في هذا الدليل، ستعلم عن المجموعة المشتركة في برمجة C. بشكل أكثر تحديدًا، كيفية إنشاء المجموعة المشتركة (النوع المشترك)، الوصول إلى أعضائها وتفهم الفرق بين المجموعة المشتركة والتركيب. المجموعة المشتركة تعرف أيضًا بمصطلح المجموعة المشتركة، وهي تتبع نفس نوع التركيب في أنواع البيانات في C.

المجموعة المشتركة نوع بيانات خاص، يسمح لك بتخزين أنواع بيانات مختلفة في نفس موقع الذاكرة. يمكنك تعريف مجموعة مشتركة تحتوي على أعضاء متعددين، ولكن في أي وقت يمكن أن يكون لديك فقط عضو واحد يحتوي على قيمة.

المجموعة المشتركة أيضًا نوع مستخدم معين، مشابه لـ C.struct، باستثناء فرق في الكلمة المفتاحية. تقوم بنية التركيب بتخصيص مساحة كافية لتخزين جميع أعضائها، بينما تخصيص مساحة المجموعة المشتركة فقط لتخزين الأكبر.

كيف يمكن تعريف المجموعة المشتركة؟

نستخدم كلمة المفتاح union لتحديد المجموعة المشتركة. إليك مثالًا:

union car
{
  char name[50];
  int price;
};

النص الأعلى يعرف نوع المجموعة المشتركة المشتقة car.

إنشاء متغير المجموعة المشتركة

بعد تعريف المجموعة المشتركة، سيتم إنشاء نوع مستخدم معين. ولكن، لم يتم تخصيص ذاكرة التخزين. لتحديد ذاكرة التخزين للنوع المشترك المحدد واستخدامه، يجب إنشاء متغير.

هذه هي طرقنا لإنشاء متغيرات الجماعة المشتركة.

union car
{
  char name[50];
  int price;
};
int main()
{
  union car car1, car2, *car3;
  return 0;
}

يمكنك أيضًا إنشاء متغيرات الجماعة المشتركة بطرق أخرى:

union car
{
  char name[50];
  int price;
} car1, car2, *car3;

في هذه الحالتين، سيتم إنشاء متغيرات الجماعة المشتركة من نوع union car وهي car1، car2 و car3 كدليل.

الوصول إلى عضو الجماعة المشتركة

نستخدم ميزة . للاستفادة من عضو الجماعة المشتركة. للاستفادة من متغيرات السهم، نستخدم أيضًا ميزة ->.

في المثال السابق،

  • للوصول إلى سعر السيارة (price) الخاصة بـ car1، استخدم car1.price.

  • للوصول إلى سعر السيارة (price) الخاصة بـ car3، يمكنك استخدام (*car3).price أو car3->price.

الفرق بين الجماعة المشتركة والهيكلية

لنشرح باستخدام مثال الفرق بين الجماعة المشتركة والهيكلية:

#include <stdio.h>
union unionJob
{
   // تعريف الجماعة المشتركة
   char name[32];
   float salary;
   int workerNo;
} uJob;
struct structJob
{
   char name[32];
   float salary;
   int workerNo;
} sJob;
int main()
{
   printf("حجم union = %d بيتة", sizeof(uJob));
   printf("\nحجم struct = %d بيتة", sizeof(sJob));
   return 0;
}

نتيجة الإخراج

حجم union = 32 بيتة
حجم structure = 40 بيتة

لماذا يوجد هناك مثل هذا الاختلاف في حجم المتغيرات الجماعية المشتركة والهيكلية؟

في هذا السياق، حجم sJob هو 40 بيتة، لأن

  • حجم name[32] هو 32 بيتة

  • حجم salary هو 4 بيتة

  • حجم workerNo هو 4 بيتة

لكن حجم uJob هو 32 بيتة. هذا لأن حجم المتغيرات الجماعية المشتركة سيكون دائمًا أكبر عنصر. في المثال السابق، حجم العنصر الأكبر (name[32]) هو 32 بيتة.

باستخدام الجماعة المشتركة، جميع العضويات تتشاركالمساحة المشتركة

مثال: الوصول إلى عضو الجماعة المشتركة

#include <stdio.h>
union Job {
   float salary;
   int workerNo;
} j;
int main() {
   j.salary = 12.3;
    // عندما يتم تعيين j.workerNo،
    // j.salary将不再保留12.3
   j.workerNo = 100;
   printf("الراتب = %.1f\n", j.salary);
   printf("عدد العمال = %d", j.workerNo);
   return 0;
}

نتيجة الإخراج

الراتب = 0.0
عدد العمال = 100