C union’lar


ULASHISH

C union’lar

union ham struct kabi turli ma’lumot tiplaridagi a’zolarni saqlay oladi.

Biroq ular o‘rtasida ba’zi farqlar bor:

  • struct tarkibida har bir a’zoning o‘z xotirasi bor.
  • union tarkibida 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!