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

Adres Değerlerinin Ekrana Yazdırılması<br />

Standart printf işlevi ile doğal veri türlerinden ifadelerin değerlerinin ekrana<br />

yazdırılabileceğini biliyorsunuz. Bir ifadenin değerini ekrana yazdırmak için, printf<br />

işleviyle birinci argüman olarak geçilen dizge içinde önceden belirlenmiş format<br />

karakterlerinin (conversion specifiers) kullanıldığını hatırlayın. Acaba bir adres bilgisi de<br />

uygun format karakteri kullanılarak ekrana yazdırılabilir mi? Evet! Standart printf<br />

işlevinde bu amaç için %p format karakterleri kullanılır. %p format karakterleri ile<br />

eşlenen argüman bir adres bilgisi ise, printf işlevi ilgili adres bilgisinin yalnızca sayısal<br />

bileşenini onaltılık sayı sisteminde ekrana yazdırır.<br />

Aşağıdaki programı derleyerek çalıştırın:<br />

#include <br />

int main()<br />

{<br />

int *ptr;<br />

int x = 20;<br />

ptr = &x;<br />

printf("x nesnesinin adresi = %p\n", &x);<br />

printf("ptr değişkeninin değeri = %p\n", ptr);<br />

printf("ptr nesnesinin adresi = %p\n", &ptr);<br />

}<br />

return 0;<br />

ptr bir nesne olduğu için ptr nesnesi de adres işlecinin terimi olabilir, değil mi? ptr<br />

nesnesinin değeri olan adres, x nesnesinin adresidir. Ama ptr nesnesinin kendi<br />

adresinden de söz edilebilir. Bir gösterici değişkenin değeri olan adres ile gösterici<br />

değişkenin kendi adresi farklı şeylerdir.<br />

printf("ptr nesnesinin adresi = %p\n", &ptr);<br />

çağrısıyla ptr değişkeninin kendi adresi ekrana yazdırılıyor.<br />

Dizi İsimlerinin Adres Bilgisine Dönüştürülmesi<br />

C dilinde dizi isimleri bir işleme sokulduğunda derleyici tarafından otomatik olarak bir<br />

adres bilgisine dönüştürülür.<br />

char s[5];<br />

gibi bir dizi tanımlamasında sonra, dizinin ismi olan s bir işleme sokulduğunda bu dizinin<br />

ilk elemanının adresine dönüştürülür.<br />

Dizi isimleri derleyici tarafından, diziler için bellekte ayrılan blokların başlangıç yerini<br />

gösteren bir adres bilgisine dönüştürülür. Yukarıdaki örnekte dizinin bellekte aşağıdaki<br />

şekilde yerleştirildiğini düşünün:<br />

s[0]<br />

s[1]<br />

s[2]<br />

s[3]<br />

s[4]<br />

1C00<br />

1C01<br />

1C02<br />

1C03<br />

1C04<br />

Bu durumda dizi ismi olan s, char türden 1C00 adresine eşdeğerdir. Yani bu adresi bir<br />

adres değişmezi şeklinde yazılmış olsaydı:<br />

(char *)0x1COO<br />

236

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

Saved successfully!

Ooh no, something went wrong!