union ساختاریه که برای استفاده بهینه از حافظه ساخته شده و به شما اجازه میده که چند تا متغیر رو داخل یک بلاک از جافظه ذخیره کنین .
نحوه تعریف union:
union name
{
type name;
type name;
...
type name;
} [optional union variables];
union ها اندازه بزرگترین متغیر داخلشون حافظه می گیرن مثلا اگر 3 تا متغیر داشته باشیم از نوع double int float از اونجایی که double از همه بزرگتره اندازه double حافظه گرفته میشه .
مثال :
#include <stdio.h>
union Data
{
int i;
float f;
double d;
} data;
int main()
{
printf( "ُSize of data ?? : %d\n", sizeof(data));
return 0;
}
همون جوری که میبینین کد بالا عدد 8 رو چاپ می کنه یعنی اندازه بزرگترین متغیر داخلش که double هست 8 بایت حافظه گرفته .
union ها می تونن چند تا عضو داشته باشن ولی فقط یکی از اعضاشون می تونن در زمان مشخص مقدار داشته باشن .
مثال :
#include <stdio.h>
union Data
{
int i;
float f;
double d;
};
int main()
{
union Data data;
data.i=7;
printf( "data.i : %d\n\n\n\n", data.i);
data.f=7.3;
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n\n\n\n", data.f);
data.d=7.33232122122;
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.d : %.15f\n", data.d);
return 0;
}
خروجی :
همون طوری که از خروجی کد بالا مشخصه زمانی که به متغیر d داخل آنیون مقدار میدین i , f هم مقدارشون عوض میشه به خاطر این که هر 3 تا متغیر union از یک بلاک حافظه استفاده می کنن.