یونیون ها (Unions)
«یونیون (Union)» ظرفی مشترک برای چند نوع داده است. اما فقط یکی فعال است. بنابراین حافظه کمتر مصرف می شود، ولی همزمان چند مقدار نگه نمی دارد.
تعریف یونیون
با کلیدواژه union تعریف کن. سپس مانند ساختار، از آن متغیر بساز.
union myUnion {
int myNum;
char myLetter;
char myString[30];
};
int main() {
union myUnion u1;
return 0;
}
دسترسی به اعضا و نکته مهم
با نقطه به عضوها دسترسی بگیر. اما همه عضوها حافظه مشترک دارند. آخرین عضوی که مقداردهی شود، معتبر است.
union myUnion {
int myNum;
char myLetter;
char myString[30];
};
int main() {
union myUnion u1;
u1.myNum = 1000;
u1.myLetter = 'A';
printf("myNum: %d\n", u1.myNum);
printf("myLetter: %c\n", u1.myLetter);
return 0;
}
نکته: برای نگهداری همزمان چند مقدار، از ساختار استفاده کن. برای مرور همین صفحه با عنوان «یونیون ها» هم می توانی برگردی.
اندازه یونیون
اندازه یونیون برابر اندازه بزرگ ترین عضو است. در ساختار این طور نیست.
union myUnion {
int myNum;
char myString[36];
};
int main() {
union myUnion u1;
printf("Size of union: %zu bytes\n", sizeof(u1));
return 0;
}
چه زمانی از یونیون استفاده کنیم؟
- وقتی فقط یک نوع را همزمان لازم داری.
- وقتی صرفه جویی حافظه مهم است.
- وقتی آدرس یک مکان، نقش های مختلف می گیرد.
هشدار: بعد از مقداردهی عضو جدید، مقدار عضوهای قبلی دیگر معتبر نیست.
برای ادامه مسیر، فصل تایپ دف (typedef) را ببین.
جمع بندی سریع
- یونیون حافظه را مشترک می کند.
- فقط آخرین مقدار معتبر است.
- اندازه یونیون، برابر بزرگ ترین عضو است.
- برای چند مقدار همزمان، ساختار بهتر است.