CodeBlanks Logo Icon CodeBlanks

union

  • C kursu
  • Orta seviye
  • Ders 36/116
  • 5 dk

union ile aynı belleği paylaşan türler öğrenirsin.

union

Bir union, struct'a benzer ama tüm üyeleri aynı belleği paylaşır. Bu yüzden bir anda yalnızca bir üye aktif olabilir. sizeof(union), en büyük üyenin boyuna eşittir.

Örnek: union Value { int i; float f; };. Burada i ve f aynı 4 baytı paylaşır. v.i = 42; yazarsan v.f'yi okumak tanımsız davranıştır. Bu yüzden hangi üyenin aktif olduğunu ayrıca takip etmek gerekir. union, bellek tasarrufu için kullanılır; özellikle gömülü sistemlerde ve protokol başlıklarında yaygındır.

Tek aktif üye

Bir union'da bir anda yalnızca bir üye aktif olabilir. Bir üyeye yazıp başka bir üyeden okumak tanımsız davranıştır; bu yüzden aktif üyeyi takip etmek şarttır.

Örnek: union Value v; v.i = 42; yazarsan v.i aktiftir. printf("%f", v.f); yazarsan sonuç belirsizdir; çünkü float olarak yeniden yorumlama yapılmaz. Doğru yaklaşım: hangi türün saklandığını ayrı bir değişkende tutmak. Bu desene tagged union denir; sonraki derste göreceksin. union, bellek sıkıştırması için güçlü ama dikkat isteyen bir araçtır.

Uygulama union ile int sakla ve yazdır

union Value tanımla: int i; ve float f;. main içinde union Value v; yaz; v.i = 42; ata ve printf("%d\n", v.i); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>

// union Value tanımla (int i ve float f)
// main'de v tanımla, i üyesini 42 yap ve yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

union Value {
    int i;
    float f;
};

int main(void) {
    union Value v;
    v.i = 42;
    printf("%d\n", v.i);
    return 0;
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 sizeof(union {int a; char b;}) ne verir?

  • sizeof(char)
  • sizeof(int) Doğru cevap
  • 1
  • 0

Açıklama: union'nin boyutu en büyük üyenin boyudur; int char'dan büyüktür.

2 union tanımını tamamla

Soru
union Value { int i; ____ f; };
Cevap
union Value { int i; float f; };

Açıklama: float, 4 bayt üye olarak union'a eklenir.

3 union ifadelerini eşle

Kavram Anlamı
union Value Tür tanımı
v.i = 42 int aktif
v.f = 3.14 float aktif
sizeof(union Value) En büyük üye boyu

Orta seviye bölümündeki tüm dersler