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

#include <br />

struct Point {<br />

double x, y;<br />

};<br />

int main()<br />

{<br />

struct Point p;<br />

struct Point *ptr = &p;<br />

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

printf("sizeof *ptr = %d\n", sizeof(*ptr));<br />

}<br />

return 0;<br />

main işlevi içinde struct Point türünden p isimli bir değişken tanımlanıyor. Bu nesnenin<br />

adresi struct Point türünden bir gösterici değişken olan ptr'ye atanıyor. Bu atamadan<br />

sonra artık p değişkenine ptr gösterici değişkeni ile de ulaşılabilir, değil mi?<br />

Bir gösterici değişken ne türden bir nesneyi gösterirse göstersin, göstericinin sizeof<br />

değeri 2 ya da 4 byte'dır.<br />

sizeof(ptr)<br />

ifadesi ile ptr gösterici değişkeninin kendi sizeof değeri elde edilirken<br />

sizeof(*ptr)<br />

ifadesi ile ptr'nin gösterdiği nesnenin yani p değişkeninin sizeof değeri elde ediliyor.<br />

Yapı Göstericisi İle Yapı Elemanlarına Erişim<br />

ptr bir yapı türünden bir gösterici ve mem de o yapının bir elemanı olmak üzere ptr'nin<br />

gösterdiği nesnenin mem isimli elemanına aşağıdaki gibi erişilebilir:<br />

(*p).mem<br />

İçerik işleci işleç öncelik tablosunun ikinci düzeyindeyken, nokta işleci birinci öncelik<br />

düzeyindedir. Burada *p ifadesinin öncelik ayracı içine alınması zorunludur. Eğer ifade<br />

*p.mem /* Geçersiz */<br />

biçiminde yazılsaydı, önce nokta işleci değer üreteceğinden, p.mem ifadesi ele<br />

alınırdı.Nokta işlecinin sol terimi bir yapı nesnesi olmadığı için, ifade geçersiz olurdu.<br />

Ok İşleci<br />

Bir yapı türünden adres söz konusu olduğunda bu adresteki yapı nesnesinin belirli bir<br />

elemanına erişmek için üç ayrı işleç kullanılabilir: Öncelik işleci, içerik işleci, nokta işleci.<br />

Bu erişim, ismi ok işleci olan tek bir işleçle yapılabilir.<br />

Ok işleci - ve > karakterlerinin yanyana getirilmesiyle oluşturulur. İki terimli araek<br />

konumunda (Binary infix) bir işleçtir. Ok işleci öncelik tablosunun en yüksek öncelik<br />

seviyesindedir. -> işlecinin sol terimi bir yapı türünden adres olmalıdır. İşlecin sağ terimi<br />

ise ilgili yapının bir elemanı olmalıdır. İşleç, sol terimi olan adresteki yapı nesnesinin, sağ<br />

terimi olan isimli elemanına erişmek için kullanılır.<br />

ptr, bir yapı türünden bir nesnenin adresini tutuyor olsun. Aşağıdaki iki ifade eşdeğerdir.<br />

372

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

Saved successfully!

Ooh no, something went wrong!