و الاتحاد هو نوع البيانات الخاص المتاح في C التي تسمح لتخزين أنواع مختلفة من البيانات في نفس موقع الذاكرة. يمكنك تحديد اتحاد يضم العديد من الأعضاء ، ولكن يمكن لعضو واحد فقط أن يحتوي على قيمة في أي وقت. توفر النقابات طريقة فعالة لاستخدام نفس موقع الذاكرة لأغراض متعددة.
تعريف الاتحاد
لتعريف الاتحاد ، يجب عليك استخدام بيان الاتحاد بنفس الطريقة التي استخدمتها أثناء تحديد البنية. يحدد بيان الاتحاد نوع بيانات جديدًا مع أكثر من عضو لبرنامجك. شكل بيان الاتحاد كما يلي -
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
و العلامة الاتحاد اختيارية وكل تعريف العضو هو تعريف متغير طبيعي، مثل ط كثافة العمليات. أو تعويم و ؛ أو أي تعريف متغير صالح آخر. في نهاية تعريف الاتحاد ، قبل الفاصلة المنقوطة النهائية ، يمكنك تحديد متغير واحد أو أكثر ، ولكنه اختياري. إليك الطريقة التي ستحدد بها نوع الاتحاد المسمى Data الذي يحتوي على ثلاثة أعضاء i و f و str -
union Data { int i; float f; char str[20]; } data;
الآن ، يمكن لمتغير من نوع البيانات تخزين عدد صحيح أو رقم فاصلة عائمة أو سلسلة من الأحرف. وهذا يعني أنه يمكن استخدام متغير واحد ، أي نفس موقع الذاكرة ، لتخزين أنواع متعددة من البيانات. يمكنك استخدام أي أنواع بيانات مضمنة أو محددة من قبل المستخدم داخل اتحاد بناءً على متطلباتك.
ستكون الذاكرة التي يشغلها الاتحاد كبيرة بما يكفي لاحتواء أكبر عضو في الاتحاد. على سبيل المثال ، في المثال أعلاه ، سيشغل نوع البيانات 20 بايت من مساحة الذاكرة لأن هذا هو الحد الأقصى للمساحة التي يمكن أن تشغلها سلسلة أحرف. يعرض المثال التالي الحجم الإجمالي للذاكرة التي يشغلها الاتحاد أعلاه -
#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
Memory size occupied by data : 20
الوصول إلى أعضاء الاتحاد
للوصول إلى أي عضو في الاتحاد ، نستخدم مشغل وصول الأعضاء (.) . يتم ترميز عامل وصول العضو كفترة بين اسم متغير الاتحاد وعضو الاتحاد الذي نرغب في الوصول إليه. يمكنك استخدام الكلمة الأساسية union لتعريف متغيرات من نوع الاتحاد. يوضح المثال التالي كيفية استخدام النقابات في برنامج -
#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
هنا ، يمكننا أن نرى أن قيم i و f أعضاء الاتحاد قد تلفتا لأن القيمة النهائية المخصصة للمتغير قد احتلت موقع الذاكرة وهذا هو سبب طباعة قيمة عضو str بشكل جيد للغاية.
الآن دعنا ننظر إلى نفس المثال مرة أخرى حيث سنستخدم متغيرًا واحدًا في كل مرة وهو الغرض الرئيسي من وجود اتحادات -
#include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0; }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -
data.i : 10 data.f : 220.500000 data.str : C Programming
هنا ، تتم طباعة جميع الأعضاء بشكل جيد للغاية لأنه يتم استخدام عضو واحد في كل مرة.
تعليقات
إرسال تعليق