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

Bu kez ptr isimli gösterici değişkenin değeri NULL adresi ise, yani ptr göstericisi bir<br />

nesneyi göstermiyorsa, foo işlevi çağrılmak istensin. if deyiminin koşul ifadesi yine iki ayrı<br />

biçimde yazılabilir:<br />

if (ptr == NULL)<br />

foo();<br />

if (!ptr)<br />

foo();<br />

Bir gösterici değişkene herhangi bir türden 0 değeri atandığında, atama öncesi 0 değeri<br />

otomatik olarak NULL adresine dönüştürülür:<br />

int *ptr = 0;<br />

Yukarıdaki deyimle ptr gösterici değişkenine NULL adresi atanıyor.<br />

Peki NULL adresi ne için kullanılır?<br />

Adrese geri dönen bir işlevin eğer başarısızlığı söz konusu ise, işlev başarısızlık durumunu<br />

NULL adresine geri dönerek bildirebilir.<br />

int türden bir dizi içinde bulunan ilk asal sayının adresi ile geri dönen bir işlev yazmak<br />

isteyelim:<br />

int *get_first_prime(const int *ptr, int size);<br />

İşlevin birinci parametresi dizinin başlangıç adresi, ikinci parametresi ise dizinin boyutu<br />

olsun. İşlevi aşağıdaki biçimde yazdığımızı düşünün:<br />

int is_prime(int val);<br />

int *get_first_prime(const int *ptr, int size)<br />

{<br />

int k;<br />

}<br />

for (k = 0; k < size; ++k)<br />

if (isprime (ptr[k]))<br />

return ptr + k;<br />

/* ??????? */<br />

Yukarıdaki işlevde, dışarıdan başlangıç adresi alınan dizimizin her elemanın asal olup<br />

olmadığı sınanıyor, ilk asal sayı görüldüğünde bu elemanın adresiyle geri dönülüyor. Peki<br />

ya dizinin içinde hiç asal sayı yoksa, for döngü deyiminden çıkıldığında işlev bir çöp değeri<br />

geri döndürür, değil mi? Peki bu durumda işlev hangi geri dönüş değerini üretebilir?<br />

Madem ki NULL adresi hiçbir yeri göstermeyen bir adres, o zaman adrese geri dönen bir<br />

işlev başarısızlık durumunu NULL adresine geri dönerek bildirebilir, değil mi?<br />

259

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

Saved successfully!

Ooh no, something went wrong!