08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Yerel bir yapı nesnesinin değeri böyle bir işlevle değiştirilemez, değil mi? İşlevin bir yapı<br />

nesnesinin değerini alması çoğu zaman gereksiz bir blok kopyalanmasına neden olur.<br />

İlgili yapı türünün sizeof değeri büyüdükçe, bellek ve işlemci zamanı kullanımı açısından<br />

verimsizlik artacağından, pek tercih edilen bir yöntem değildir. Küçük yapı nesneleri için<br />

kullanılabilir.<br />

Yapı Nesnesinin Adresinin İşleve Gönderilmesi<br />

Bir işlevin parametre değişkeni yapı türünden bir gösterici olursa, işlev de bu türden bir<br />

yapı nesnesinin adresi ile çağrılabilir. Böyle bir işleve yapılan çağrı ile, yalnızca bir<br />

gösterici nesnesinin sizeof'u kadar veri işleve gönderilir.<br />

Bu yöntem çoğunlukla daha iyidir. Hemen her zaman bu yöntem kullanılmalıdır. Bu<br />

yöntemde yapı ne kadar büyük olursa olsun, aktarılan yalnızca bir adres bilgisidir. Üstelik<br />

bu yöntemde işlev kendisine adresi gönderilen yapı değişkenini değiştirebilir. Şüphesiz<br />

böyle bir aktarım işlemi, yapı nesnesinin bellekte tek bir blok olarak yer alması yüzünden<br />

mümkündür. Daha önce tanımlanan display_person isimli işlev, bu kez bir yapı<br />

nesnesinin adresini alacak biçimde yazılıyor:<br />

void display_person(const struct Person *ptr)<br />

{<br />

printf("%d %s %s %.2lf\n", ptr->no, ptr->name, ptr->fname, ptr->wage);}<br />

int main()<br />

{<br />

struct Person person = {"Necati", "ERGIN", 2345, 3.56};<br />

display_person(&person);<br />

}<br />

return 0;<br />

display_person isimli işlevin parametre değişkeninin<br />

const struct Person *ptr<br />

biçiminde bildirildiğini görüyorsunuz. İşlev dışarıdan struct Person türünden bir nesnenin<br />

adresini istiyor. Bildirimde kullanılan const anahtar sözcüğünün, adresi alınan yapı<br />

nesnesinde değişiklik yapılmayacağı bilgisini ilettiğini biliyorsunuz.<br />

İşlevin kodu içinde kullanılan<br />

ptr->no<br />

ifadesi int türdendir. Bu ifade dışarıdan adresi alınan yapı nesnesinin no isimli elemanı<br />

olan nesneye karşılık gelir.<br />

Bir Yapı Türüne Geri Dönen İşlevler<br />

Bir işlevin geri dönüş değeri bir yapı türünden olabilir. Aşağıdaki örneği inceleyin:<br />

struct Point {<br />

double m_x, m_y;<br />

};<br />

struct Point make_point(double x, double y);<br />

int main()<br />

{<br />

struct Point a;<br />

374

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

Saved successfully!

Ooh no, something went wrong!