Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C#’ta Gösterici(Pointer) – Göstericilerde Indexer – X

Merhaba,

Gösterici yazı dizimizde pointerlarla ilgili bir çok içerik üzerinde makale ele almış bulunmaktayız. Şimdi ise yapısal olarak birden çok içeriği ilgilendiren bir konu üzerinde, göstericilerde indexer yapıları üzerinde konuşuyor olacağız.

Evet… İçeriğimizin başlığında da değindiğimiz gibi göstericiler üzerinde indexer yapıları kullanılabilmektedir.
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X
Yukarıdaki ekran görüntüsünden de gördüğünüz gibi “ipointer” isimli işaretçiye indexer aracılığıyla “0” değerini verdiğimizde ilgili değişkenin değerini bizlere getirmektedir. Şimdi gelin burada yapılan işlemi ve neler olup bittiğini ele alalım.

Göstericiye indexer aracılığıyla verdiğimiz “0” değeri bize ilgili göstericinin işaret ettiği bellek adresindeki değeri getirmektedir. Peki indexera “1”, “3” veyahut “128” gibi herhangi bir değer verseydik ne olacaktı bakalım…
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X
Gördüğünüz üzere farklı bir bellek adresindeki herhangi bir değeri karşımıza getirmiş bulunmaktadır. “Peki neye göre bu işlemi yapmaktadır?” diye sorarsanız eğer Göstericilerde Aritmatik İşlemler başlıklı makalemizde ne konuştuysak aynı işlevde bir aritmatik mantık ortaya koymaktadır…

Yani şöyle ki;
Pointera indexer aracılığıyla verilen değer; pointerın işaretlediği bellek adresini, pointerın tipinin byte değeri kadar arttırmaktadır. Yani “ipointer” isimli pointerımız int tipinden olduğu için “ipointer[0]” komutu “*(ipointer + 0 * 4)” mantığıyla işlemektedir ve 0 byte artarak doğal olarak ilk verilen değişkenin bellek adresini işaret etmektedir. Benzer şekilde “ipointer[10] deyimi ise “*(ipointer + 10 * 4)” şeklinde işlenecektir ve işaretlediği bellek adresi 40 byte arttırılacaktır. Yani bildiğiniz göstericilerde aritmatik işlemleri indexer ile gerçekleştirmekteyiz. Olayı daha iyi gözler önüne getirebilmek için aşağıdaki ekran görüntüsünü inceleyiniz…
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X

Bu arada dikkat ederseniz eğer pointerlarda kullandığımız indexer yapıları pointerın direkt olarak işaret ettiği bellek adresindeki veriyi getirmektedir. Haliyle bu yukarıda yapmış olduğumuz işlemi aşağıdaki şemayada benzetebiliriz.
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X

Haliyle bu mantığı test etmek için aşağıda ele aldığımız kod bloğu ve çıktısına göz atınız.
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X
Yani tekrardan özetlemek gerekirse bir pointera direkt olarak yapılan aritmatik işlem sonucunda işaretlenen bellek adresinin değerini elde etmeyle(*(ipointer + i)), indexer kullanarak verilen değere karşılık hangi bellek adresine denk geliyorsa oradaki değeri elde ettirmesi(ipointer[i]) aynı kapıya çıkmaktadır.

O halde şöyle bir genellemeye varabiliriz…

“ipointer[i]” ilgili bellek adresindeki değeri/nesneyi belirtirken, “(ipointer + i)” ilgili bellek adresini belirtir. “ipointer[i]” direkt değeri gönderdiği için değere ulaşmak ayrı bir işlem gerektirmemektedir lakin “(ipointer + i)” deyimi bellek adresini belirttiği için değere ulaşmak * operatörünü gerektirmektedir. *(ipointer + i) gibi…

Göstericilerde indexer yapılarını dizi işlemlerinde de kullanmaktayız. Göstericiler İle Dizi İşlemleri ve stackalloc Anahtar Sözcüğü başlıklı makalelerde göstericiler ile dizilerin nasıl kullanıldığına detaylıca değinmiştik.
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X
Haliyle yukarıdaki kullanımı indexer ile aşağıdaki gibide gerçekleştirebiliriz.
C#’ta Gösterici(Pointer) – Göstericilerde Indexer - X

Evet arkadaşlar… Bir yazımızın daha sonuna gelmiş bulunmaktayız. Sonraki yazımızda struct türünden göstericiler üzerine detaylı bir içerik oluşturarak ilgili yazı dizimizede son vermeyi düşünüyorum.

Şimdilik görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 25 Mayıs 2017

    […] C#’ta Gösterici(Pointer) – Göstericilerde Indexer – X […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*