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 />

struct Date {<br />

int d, m, y;<br />

};<br />

struct Date mydate = {4, 3, 1964};<br />

&mydate<br />

ifadesi geçerli bir ifadedir. Bu ifade (struct Date *) türündendir.<br />

Peki &mydate ile &mydate.day aynı adresler midir? Bu adreslerin sayısal bileşenleri aynı<br />

olmakla birlikte tür bileşenleri farklıdır. İki ifade, sayısal bileşenleri aynı olan farklı türden<br />

iki adres bilgisidir.<br />

&mydate ifadesinin türü (struct Date *) iken &mydate.day ifadesinin türü (int *) türüdür.<br />

Atama İşleci ve Yapı Nesneleri<br />

Bir yapı nesnesi atama işlecinin sol ya da sağ terimi olabilir.<br />

Bir yapı nesnesine atama işleci ile ancak aynı türden başka bir yapı nesnesi atanabilir.<br />

Atama işlecinin sağındaki ve solundaki türlerin farklı yapı türlerinden olması geçersizdir.<br />

Aynı türden iki yapı nesnesinin birbirine atanmasında yapı elemanları karşılıklı olarak<br />

birbirlerine atanır. Yani bir blok kopyalanması söz konusudur. Atama işlemi için kesinlikle<br />

iki yapı değişkeninin de aynı türden olması gerekir. İki yapı değişkeni de aynı türden<br />

değilse bu durum geçersizdir. İki yapının aynı türden olmaları için aynı yapı ismi ile<br />

tanımlanmış olmaları gerekir. Aşağıdaki iki yapı, elemanlarının türleri ve isimleri aynı<br />

olduğu halde farklı iki tür belirtirler ve bu türlerden nesneler birbirlerine atanamaz.<br />

struct POINT_1 {<br />

int x, y;<br />

};<br />

struct POINT_2{<br />

int x, y;<br />

};<br />

void func()<br />

{<br />

struct POINT_1 a;<br />

struct POINT_2 b;<br />

}<br />

b.x = 10;<br />

b.y = 20;<br />

a = b; /* Geçersiz */<br />

İki yapı nesnesinin birbirine atanması, nesnelerin tüm elemanlarının karşılıklı olarak<br />

birbirlerine atanması sonucunu doğurur. Yani bir blok kopyalaması söz konusudur.<br />

Özellikle büyük yapılar söz konusu olduğunda atama işleci ile yapı nesnelerini birbirine<br />

atanmasının maliyetinin yüksek olduğu unutulmamalıdır. İlgili yapı türünün sizeof değeri<br />

büyüklüğünde bir bellek bloğu, adeta memcpy benzeri bir işlevle kopyalanır.<br />

Aşağıdaki programı derleyerek çalıştırın:<br />

#include <br />

#include <br />

struct Data{<br />

int i;<br />

long l;<br />

double d;<br />

};<br />

365

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

Saved successfully!

Ooh no, something went wrong!