union در زبان C
Union یک نوع داده خاص در زبان برنامه نویسی C می باشد که به ما امکان ذخیره سازی انواع داده های مختلف در یک محل از حافظه را می دهد. شما می توانید یک union را با تعداد زیادی عضو تعریف کنید، اما فقط یکی از این عضوها می تواند مقدار داشته باشد. در ادامه این موضوع را بهتر درک خواهید کرد. union ها یک روش کارآمد برای استفاده از یک محل حافظه برای چند هدف ارائه می دهند.
تعریف یک union
تعریف یک union مشابه تعریف یک ساختار در زبان C است. شکل کلی تعریف یک union را در زیر مشاهده می کنید:
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
بخش union tag اختیاری است و تعریف عضوهای union مانند تعریف متغیرهای عادی می باشد. بعد از } و قبل از سمی کالن می توانید متغیرهای خود را که از نوع union شما خواهند را تعریف کنید. در مثال زیر یک union با نام Data که شامل سه عضو است تعریف شده است:
union Data { int i; float f; char str[20]; } data;
حال یک متغیر از نوع Data می تواند یک عدد صحیح، یک عدد اعشاری و یا یک رشته را در خود ذخیره کند. به این معنی که یک محل از حافظه برای ذخیره سازی چندین نوع داده مختلف استفاده می شود. میزان حافظه ای که توسط یک union اشغال می شود، برابر با اندازه بزرگ ترین عضو union خواهد بود. در مثال بالا میزان حافظه اشغالی توسط Data به اندازه بزرگ ترین عضو آن یعنی str خواهد بود (یعنی ۲۰ بایت). مثال زیر این موضوع را به خوبی نشان می دهد:
#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; }
امتحان کنید
زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Memory size occupied by data : 20
دسترسی به اعضای union
به منظور دسترسی به اعضای یک union می توانید از عملگر (.) استفاده کنید. در هنگام تعریف یک متغیر از نوع union باید از کلمه کلیدی 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 قرار داده شده بود، خراب شده اند. زیرا آخرین مقداری که به یک union تخصیص داده می شود فضای حافظه را اشعال می کند و سایر عضو ها با مقادیر زباله پر می شوند.
مثال زیر تغییر یافته مثال بالا است:
#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
نوشته union در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.