08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

typedef struct {<br />

char isim[20];<br />

char yazar[20];<br />

int sayfa_sayisi;<br />

}Kitap;<br />

typedef struct {<br />

char desen[20];<br />

int renk;<br />

int size;<br />

}Tshirt;<br />

typedef struct {<br />

char isim[20];<br />

int model;<br />

}Saat;<br />

typedef union {<br />

Kitap <strong>kitap</strong>;<br />

Tshirt tshirt;<br />

Saat saat;<br />

}Data;<br />

typedef struct {<br />

int stok_no;<br />

float fiyat;<br />

int urun_tipi;<br />

Data data;<br />

}Katalog;<br />

Yukarıdaki bildirimleri inceleyin. Önce <strong>kitap</strong>, tshirt ve saate ilişkin bilgileri tutmak<br />

amacıyla Kitap, Tshirt ve Saat isimli yapılar bildirilmiş. Unix, Windows sistemlerinde<br />

Kitap, Tshirt ve Saat yapılarının sizeof değerleri sırasıyla 44, 28 ve 24'dür. Daha sonra<br />

Data isimli bir birliğin bildirildiğini görüyorsunuz. Bu birliğin elemanları Kitap, Tshirt ve<br />

Saat türlerinden olduğuna göre bu birliğin sizeof değeri en uzun elemanının yani Kitap<br />

yapısı türünden olan elemanının sizeof u kadardır, yani 44 dür.<br />

Katalog isimli yapının bildiriminde ise Data birliği türünden data isimli bir eleman yer<br />

alıyor. Bu durumda Katalog yapısının sizeof değeri yalnızca 56 olur. Birliğin<br />

kullanılmasıyla Katalog yapısının sizeof değeri 108 den 56'ya düşürülüyor.<br />

#include <br />

int main()<br />

{<br />

printf("sizeof(Katalog) = %u\n", sizeof(Katalog));<br />

}<br />

return 0;<br />

Katalog yapısıyla ilgili işlem yapan kod parçaları, Katalog yapısı türünden nesnenin önce<br />

urun_tipi isimli elemanının değerine bakarak, ürünün cinsi bilgisini elde ettikten sonra,<br />

duruma göre, data isimli elemanları farklı biçimde kullanabilir:<br />

Katalog katalog;<br />

/***/<br />

if (katalog.urun_tipi == KITAP)<br />

puts(katalog.data.<strong>kitap</strong>.isim)<br />

415

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!