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 a[] = {1, 2, 3, 4, 5};<br />

int x = 10;<br />

int *ptr;<br />

putchar(*s);<br />

printf("%d\n", *a);<br />

*&x = 20;<br />

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

ptr = &x;<br />

*ptr = 30;<br />

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

}<br />

return 0;<br />

Yukarıdaki programda,<br />

i) s char türden bir dizinin ismi olduğuna göre char türden bir adrese dönüştürülür. Bu<br />

adres s dizisinin başlangıç adresidir. *s ifadesi bu adresteki nesne olduğuna göre, *s<br />

ifadesi dizimizin ilk elemanı olan nesnedir, yani *s ifadesinin değeri 'B'dir, değil mi?<br />

ii) a int türden bir dizinin ismi olduğuna göre int türden bir adrese dönüştürülür. Bu adres<br />

a dizisinin başlangıç adresidir. *a ifadesi bu adresteki nesne olduğuna göre, *a ifadesi int<br />

türden dizimizin ilk elemanı olan nesnedir, yani *a ifadesi a[0] nesnesidir. Bu nesnenin<br />

değeri 1'dir.<br />

iii) *&x ifadesinde ise iki ayrı işleç kullanılıyor. Adres ve içerik işleçleri. Bu işleçlerin her<br />

ikisi de işleç öncelik tablosunda ikinci seviyede yer alıyor. İşleç öncelik tablosunun ikinci<br />

seviyesine ilişkin öncelik yönü sağdan sola olduğuna göre, ifadenin değerlendirilmesinde<br />

önce adres işleci değer üretir. Adres işlecinin ürettiği değer x nesnesinin adresidir, içerik<br />

işlecinin terimi bu adres olur. İçerik işleci o adresteki nesneye ulaştığına göre *&x ifadesi<br />

x nesnesinin adresindeki nesne, yani x nesnesinin kendisidir.<br />

iv) ptr göstericisine x nesnesinin adresi atanıyor. İçerik işlecinin terimi ptr nesnesi<br />

olduğundan, ptr nesnesinin değeri olan adresteki nesneye ulaşılır. Bu durumda da *ptr<br />

nesnesi yine x nesnesinin kendisidir, değil mi?<br />

İçerik işlecinin öncelik tablosunun ikinci düzeyinde olduğunu biliyorsunuz. s bir dizi ismi<br />

olmak üzere<br />

*s + 1;<br />

ifadesinde önce içerik işleci değer üretir. İçerik işlecinin ürettiği değer toplama işlecinin<br />

terimi olur. Oysa ifade<br />

*(s + 1)<br />

biçiminde olsaydı önce + işleci ele alınırdı.<br />

Derleyiciler * atomu içeren bir ifadede * atomunun çarpma işleci mi yoksa adres işleci<br />

mi olduğunu ifade içindeki kullanımına bakarak anlar. Çarpma işleci iki terimli iken içerik<br />

işleci tek terimli önek konumunda bir işleçtir.<br />

*s * 2<br />

ifadesinde birinci '*' içerik işleci iken ikincisi * aritmetik çarpma işlecidir.<br />

239

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

Saved successfully!

Ooh no, something went wrong!