Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
1 beğenilme 0 beğenilmeme
1.6k kez görüntülendi

Union yapısında en büyük boyuta sahip değişken,union'un boyutunu belirler.

 

Ancak struct yapısında bu değer nasıl hesaplanır ?

#include <stdio.h> 

struct k1{ char a;
double b;
int c;
}; union k2{
int q;
double v;
char c;
};
main() {
printf("k1 size : %d \n",sizeof(k1));
printf("k2 size : %d",sizeof(k2));
}


çıktı 24 ve 8

Veri Bilimi kategorisinde (159 puan) tarafından 
tarafından düzenlendi | 1.6k kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Struct içinde herbir veri tipi hafızada kendi boyutuna bölünen bir adreste başlar (başlangıçtan sayıldığında). Bu yüzden struct oluştururken bileşenleri hizalamak (alignment) için dolgu (padding) kullanılır. Yukarıda k1 için bu şöyle işler:

  • char 1 byte 
  • 7 byte dolgu
  • double 8 byte
  • int 4 byte
  • 4 byte dolgu

Toplamda 24 byte çıkar. Aynı bileşenleri aşağıdaki gibi sıralasaydık

struct k3{ double b;
int c;
char a;
};

bu sefer

  • double 8 byte
  • int 4 byte
  • char 1 byte
  • 3 byte dolgu

olur ve boyut 16 olurdu.

Union veri tipinin boyu ise icindeki en buyuk veri tipinin boyuna esittir. Union veri tipinin slotlarina ayni anda ulasamazsiniz ama struct veri tipinde bunu yapabilirsiniz. Kodunuzdaki k2 bu nedenle 8 cikti.

 

(1.8k puan) tarafından 
tarafından düzenlendi
merhabalar hocam,cevap için teşekkür ederim .

artık buralarda iseniz eski ilgime geri dönmeyi düşünüyorum :)..
Rica ederim. Çok sevinirim.
20,274 soru
21,803 cevap
73,476 yorum
2,428,172 kullanıcı