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

**pp = 2000;<br />

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

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

}<br />

return 0;<br />

Yukarıdaki main işlevinde, int türden x değişkeninin adresi, p isimli gösterici değişkene<br />

atandıktan sonra<br />

deyimiyle, p göstericisinin gösterdiği nesneye yani x değişkenine 100 değeri atanıyor.<br />

*p = 100;<br />

pp = &x;<br />

deyimiyle ise p nesnesinin adresi pp isimli göstericiye atanıyor. Bu atamadan sonra pp<br />

göstericisi p göstericisini gösterir.<br />

*pp = &y;<br />

deyimi ile pp göstericisinin gösterdiği nesneye yani p değişkenine bu kez y değişkeninin<br />

adresi atanıyor. Bu atamadan sonra yürütülecek<br />

*p = 200;<br />

ataması ile artık p göstericisinin gösterdiği nesneye yani y değişkenine 200 değeri atanır.<br />

Şimdi de aşağıdaki deyimi inceleyin:<br />

**pp = 2000;<br />

İçerik işlecinin, işleç öncelik tablosunun ikinci düzeyinde yer aldığını ve sağdan sola<br />

öncelik yönüne sahip olduğunu biliyorsunuz.<br />

Bu durumda önce *pp ifadesi ile pp göstericisinin gösterdiği nesneye yani p nesnesine<br />

erişilir. Daha sonra *(*pp) ifadesiyle de pp göstericisinin gösterdiği nesnenin gösterdiği<br />

nesneye, yani p nesnesinin gösterdiği nesneye, yani y değişkenine ulaşılır. Deyimin<br />

yürütülmesiyle y değişkenine 2000 değeri atanmış olur.<br />

**pp ifadesi, pp'nin gösterdiği nesnenin gösterdiği nesneye, yani y nesnesine karşılık<br />

gelir.<br />

Yerel Bir Gösterici Değişkenin Değerini Değiştiren İşlevler<br />

Yerel bir nesnenin değerini değiştirecek bir işlev, yerel nesnenin adresi ile çağrılmalıdır.<br />

Yerel bir gösterici değişkenin değerini değiştirecek bir işlev de, yerel göstericinin değerini<br />

değil adresini almalıdır. Aşağıdaki örneği inceleyin:<br />

void swap_ptr(int **p1, int **p2)<br />

{<br />

int *temp = *p1;<br />

*p1 = *p2;<br />

*p2 = temp;<br />

}<br />

Yukarıdaki programda int * türünden iki nesnenin değerini takas etmek amacıyla<br />

swap_ptr isimli bir işlev tanımlanıyor. İşlevin int ** türünden iki parametresi olduğunu<br />

görüyorsunuz. Bu işlev şüphesiz değerlerini takas edeceği nesnelerin adresleri ile<br />

çağrılmalıdır:<br />

308

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

Saved successfully!

Ooh no, something went wrong!