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

GÖSTERİCİLER<br />

Birinci bölümde yazılan kodlarda nesnelerin değerleri kullanıldı. Örneğin değişkenlerin<br />

değerleri işlevlere argüman olarak gönderildi. İşlevler nesnelerin değerlerini geri<br />

döndürdü. "Göstericiler" (pointers) ile artık nesnelerin değerlerinin yanı sıra nesnelerin<br />

adresleri üzerinde de durulacak.<br />

Nasıl, oturduğunuz evin adresinden söz ediliyorsa, programda kullandığınız nesnelerin de<br />

adreslerinden söz edilebilir. Bir nesnenin adresi o nesnenin bellekteki konumunu gösteren<br />

bir bilgidir.<br />

İşte C dilinde yazılan birçok kod, nesnelerin adresi olan bilgileri kullanılır. Yazılımsal bazı<br />

amaçların gerçekleştirilmesi için, nesnelerin adresleri değişkenlerde saklanır, işlevlere<br />

gönderilir, işlev çağrılarıyla işlevlerden geri dönüş değeri olarak elde edilir.<br />

Her nesne bellekte yer kapladığına göre belirli bir adrese sahiptir. Nesnelerin adresleri,<br />

sistemlerin çoğunda, derleyici ve programı yükleyen işletim sistemi tarafından ortaklaşa<br />

belirlenir. Nesnelerin adresleri program yüklenmeden önce kesin olarak bilinemez ve<br />

programcı tarafından da önceden saptanamaz. Programcı nesnelerin adreslerini ancak<br />

programın çalışması sırasında (run time) öğrenebilir. Örneğin:<br />

char ch;<br />

Gibi bir tanımlamayla karşılaşan derleyici bellekte ch değişkeni için 1 byte yer ayırır.<br />

Derleyicinin ch değişkeni için bellekte hangi byte'ı ayıracağı önceden bilinemez. Bu ancak<br />

programın çalışması sırasında öğrenilebilir. Yukarıdaki örnekte ch değişkeninin yerel yerel<br />

olduğunu düşünelim. ch değişkeni, tanımlanmış olduğu bloğun kodu yürütülmeye<br />

başlandığında yaratılır, bloğun kodunun yürütülmesi bittiğinde de ömrü sona erer.<br />

Aşağıdaki şekil ch değişkeninin 1A02 adresinde olduğu varsayılarak çizilmiştir:<br />

ch<br />

1A00<br />

1A01<br />

1A02<br />

1A03<br />

1A04<br />

Tanımlanan nesne 1 byte'dan daha uzunsa, o zaman nesnenin adresi nasıl belirlenir?<br />

int b;<br />

1 byte'tan uzun olan nesnelerin adresleri, onların ilk byte'larının adresleriyle belirtilir.<br />

Yukarıdaki örnekte b değişkeninin adresi 1C02'dir. Zaten b değişkeninin int türden olduğu<br />

bilindiğine göre diğer parçasının 1C03 adresinde olacağı da açıktır (int türden bir<br />

nesnenin ilgili sistemde 2 byte yer kapladığı varsayılıyor).<br />

Benzer biçimde long türden olan y değişkeninin bellekteki yerleşiminin aşağıdaki gibi<br />

olduğu varsayılırsa, adresinin 1F02 olduğu söylenebilir:<br />

229

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

Saved successfully!

Ooh no, something went wrong!