العودة إلى الدورة

الاتحادات (Unions) وحالات استخدامها

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 45: الاتحادات (Unions) وحالات استخدامها

الاتحاد (Union) يشبه الهيكل، ولكن مع فرق جوهري: جميع أعضاء الاتحاد يتشاركون نفس موقع الذاكرة.

تعريف واستخدام الاتحاد

القاعدة: حجم الاتحاد يساوي حجم أكبر أعضائه.

c union Data { int i; float f; char str[20]; };

int main() { union Data data;

// الذاكرة كبيرة بما يكفي لأكبر عضو (str، 20 بايت).
printf("حجم الذاكرة الذي يشغله Data هو: %zu\n", sizeof(data)); // المخرجات: حوالي 20

// 1. تعيين قيمة لـ 'i'
data.i = 10; 
printf("data.i : %d\n", data.i); 

// 2. تعيين قيمة لـ 'f' (هذا يمسح الذاكرة التي تم تخزين 'i' فيها)
data.f = 220.5;
printf("data.f : %f\n", data.f); 

// 3. محاولة قراءة 'i' الآن ستعطي قيمة عشوائية (الذاكرة تم استبدالها)
printf("data.i (بعد تحديث f): %d\n", data.i); 

return 0;

}

حالات الاستخدام

  1. تحسين الذاكرة: تُستخدم الاتحادات عندما تعلم أن واحداً فقط من الأعضاء سيتم استخدامه في وقت معين، مما يوفر الذاكرة.
  2. التلاعب بالأنواع (Type Punning): تُستخدم في البرمجة منخفضة المستوى لتفسير نفس كتلة الذاكرة بطرق مختلفة (مثل قراءة عدد صحيح كتسلسل من الأحرف).