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

Gösterici İşleçleri<br />

C dilinin bazı işleçleri adres bilgileri ile ilgili olarak kullanılır. Göstericiler ile ilgili kodlar bu<br />

işleçleri kullanır. Gösterici işleçleri şunlardır:<br />

* içerik işleci indirection operator (dereferencing operator)<br />

& adres işleci address of operator<br />

[ ] köşeli ayraç işleci index operator (subscript operator)<br />

-> ok işleci arrow operator<br />

ok işleci yapı türünden adreslerle kullanıldığı için bu işleç "yapılar" konusunda ayrıntılı<br />

olarak incelenecek.<br />

Adres İşleci<br />

Adres işleci (adress of operator), önek konumunda tek terimli (unary prefix) bir işleçtir.<br />

İşleç öncelik tablosunun ikinci seviyesinde yer alır. Bu işlecin ürettiği değer, terimi olan<br />

nesnenin adresidir. Adres işlecinin terimi mutlaka bir nesne olmalıdır. Çünkü yalnızca<br />

nesnelerin -sol taraf değerlerinin- adres bilgilerine ulaşılabilir. Adres işlecinin teriminin<br />

nesne olmayan bir ifade olması geçersizdir.<br />

int k;<br />

gibi bir tanımalamadan sonra yazılan<br />

&k<br />

ifadesini ele alalım. Bu ifadenin ürettiği değer int türden bir adres bilgisidir.<br />

Bu ifadenin türü (int *) türüdür.<br />

& işleci diğer tek terimli işleçler gibi, işleç öncelik tablosunun 2. seviyesinde bulunur. Bu<br />

öncelik seviyesinin öncelik yönünün "sağdan sola" olduğunu biliyorsunuz.<br />

Bir gösterici değişkeni, içinde bir adres bilgisi tutan bir nesne olduğuna göre, bir gösterici<br />

değişkene adres işlecinin ürettiği bir adres bilgisi atanabilir.<br />

int x = 20;<br />

int *ptr;<br />

ptr = &x;<br />

Böyle bir atamadan sonra şunlar söylenebilir:<br />

ptr nesnesinin değeri x değişkeninin adresidir. ptr nesnesi x değişkeninin adresini tutar.<br />

Adres işleci ile elde edilen adres, aynı türden bir gösterici değişkene atanmalıdır. Örneğin<br />

aşağıdaki programda bir gösterici değişkene farklı türden bir adres atanıyor:<br />

char ch = 'x';<br />

int *p;<br />

p = &ch; /* Yanlış */<br />

Tabi bu işlecin ürettiği adres bilgisi de sol taraf değeri değildir. Örneğin:<br />

int x;<br />

++&x /* Geçersiz */<br />

gibi bir işlem hata ile sonuçlanır. Artırma işlecinin terimi nesne olmalıdır. Yukarıdaki<br />

ifadede ++ işlecinin terimi olan &x ifadesi bir nesne değildir. Yalnızca bir adres değeridir.<br />

235

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

Saved successfully!

Ooh no, something went wrong!