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
#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
#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
union Value { int i; ____ f; };
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 |