C union’lar
C union’lar
union ham struct kabi turli ma’lumot tiplaridagi a’zolarni saqlay oladi.
Biroq ular o‘rtasida ba’zi farqlar bor:
structtarkibida har bir a’zoning o‘z xotirasi bor.uniontarkibida esa barcha a’zolar bitta xotirani birgalikda ishlatadi, ya’ni bir vaqtning o‘zida qiymatlardan faqat bittasidan foydalanish mumkin.
Ko‘pincha union’lar o‘rniga strukturalardan foydalanasiz, chunki ular bir vaqtning o‘zida bir nechta qiymatni saqlash va ularga murojaat qilish imkonini beradi — kundalik dasturlarda bu ko‘proq uchraydi.
Biroq bir vaqtda bir nechta mumkin bo‘lgan tipdan faqat bittasini saqlash kerak bo‘lsa va xotirani tejamoqchi bo‘lsangiz, union’lar foydali.
Union e’lon qilish
Union yaratish uchun union kalit so‘zidan foydalaning, so‘ngra undan o‘zgaruvchi yarating (xuddi strukturalardagi kabi):
Misol
union myUnion { // Union declaration
int myNum; // Member (int)
char myLetter; // Member (char)
char myString[30]; // Member (char array)
};
int main() {
union myUnion u1; // Create a union variable with the name "u1":
return 0;
}
Union a’zolariga murojaat qilish
Xuddi strukturalardagi kabi, union a’zolariga murojaat qilish uchun nuqta . sintaksisidan foydalaning.
Muhim: Barcha a’zolar bitta xotirani birgalikda ishlatgani uchun bittasini o‘zgartirish boshqalariga ham ta’sir qiladi. Faqat oxirgi qiymat berilgan a’zo to‘g‘ri qiymatga ega bo‘ladi:
Misol
union myUnion {
int myNum;
char myLetter;
char myString[30];
};
int main() {
union myUnion u1;
u1.myNum = 1000;
// Since this is the last value written to the union, myNum no longer holds 1000 - its value is now invalid
u1.myLetter = 'A';
printf("myNum: %d\n", u1.myNum); // This value is no longer reliable
printf("myLetter: %c\n", u1.myLetter); // Prints 'A'
return 0;
}
O‘zingiz sinab ko‘ring »
Union o‘lchami
union o‘lchami har doim uning eng katta a’zosi o‘lchamiga teng bo‘ladi:
Misol
union myUnion {
int myNum;
char myString[36];
};
int main() {
union myUnion u1;
printf("Size of union: %zu bytes\n", sizeof(u1));
return 0;
}
O‘zingiz sinab ko‘ring »
Eng katta a’zo 36 bayt bo‘lgani uchun butun union ham 36 bayt bo‘ladi.
Agar uning o‘rnida struct bo‘lganida, o‘lcham 40 bayt bo‘lardi:
myNum (4 bayt) + myString (36 bayt) = jami 40 bayt
Union’lardan qachon foydalanish kerak
Union’lardan quyidagi hollarda foydalaning:
- Turli tiplarni bitta joyda saqlash kerak bo‘lganda
- Bir vaqtda faqat bitta tipdan foydalanganingizda
- Xotirani tejash juda muhim bo‘lganda
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
