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

int *func(void)<br />

{<br />

/***/<br />

}<br />

func işlevinin geri dönüş değeri türü yerine int * yazıldığını görüyorsunuz. Yukarıdaki işlev<br />

tanımından * atomu kaldırılırsa, işlevin int türden bir değer döndürdüğü anlaşılır.<br />

Adrese geri dönen bir işlev ne anlama gelir? İşlev çağrıldığı yere, int türden bir nesnenin<br />

adresini iletir. İşlev çağrı ifadesi, işlevin geri dönüş değerine yani bir adres bilgisine<br />

eşdeğerdir. İşlevin geri dönüş değeri bir nesnede saklanmak istenirse aynı türden bir<br />

gösterici değişkene atanmalıdır:<br />

int *ptr;<br />

ptr = func();<br />

Benzer biçimde:<br />

İşlevlerin geri dönüş değerlerini geçici bir nesne yardımıyla oluşturduklarını biliyorsunuz.<br />

Bir işlevin geri dönüş değerinin türü, geri dönüş değerini içinde taşıyacak geçici nesnenin<br />

türüdür. Bu durumda, bir adres türüne geri dönen bir işlevin, geri dönüş değerini içinde<br />

tutacak geçici nesne de bir göstericidir.<br />

Bir adres bilgisiyle geri dönen işlevlere C programlarında çok rastlanır. Standart C<br />

işlevlerinin bazıları da, adres türünden bir değer döndürür.<br />

Aşağıdaki kod parçasını inceleyin:<br />

#include <br />

int g = 10;<br />

int *foo()<br />

{<br />

return &g;<br />

}<br />

int main()<br />

{<br />

int *ptr;<br />

printf("g = %d\n", g);<br />

ptr = foo();<br />

*ptr = 20;<br />

printf("g = %d\n", g);<br />

}<br />

return 0;<br />

foo işlevi çağrıldığında global g isimli değişkenin adresini döndürüyor. İşlev geri dönüş<br />

değerini<br />

return &g;<br />

deyimiyle üretiyor. &g ifadesi (int *) türündendir. Bu ifadenin değeri yine (int *)<br />

türünden olan geçici nesneye atanıyor. main işlevi içinde çağrılan foo işlevinin geri<br />

döndürdüğü adres, ptr gösterici değişkenine atanıyor.<br />

Bir dizinin en büyük elemanını bulup bu elemanın değerine geri dönen getmax isimli işlev<br />

daha önce yazılmıştı. Aşağıda aynı işlev bu kez en büyük dizi elemanının adresine geri<br />

dönecek şekilde yazılıyor:<br />

253

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

Saved successfully!

Ooh no, something went wrong!