الدرس 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;
}
حالات الاستخدام
- تحسين الذاكرة: تُستخدم الاتحادات عندما تعلم أن واحداً فقط من الأعضاء سيتم استخدامه في وقت معين، مما يوفر الذاكرة.
- التلاعب بالأنواع (Type Punning): تُستخدم في البرمجة منخفضة المستوى لتفسير نفس كتلة الذاكرة بطرق مختلفة (مثل قراءة عدد صحيح كتسلسل من الأحرف).