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

C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII

Merhaba,

Bir önceki C#’ta Gösterici(Pointer) – fixed Anahtar Sözcüğü – VII başlıklı makalemizde göstericilerin işaretlediği nesnelerin üye elemanlarının bellek adreslerini Garbage Collector mekanizmasına karşı önlem alarak sabitleyen fixed anahtar sözcüğünü incelemiştik. Bu makalemizde ise göstericiler ile dizi işlemlerini ele alacağız.

Yukarıda adresini vermiş olduğum önceki içeriğimizde vurguladığım gibi sınıf yapıları managed type(yönetilen tip) olduklarından dolayı bellek adreslerini pointerlar ile işaretleyememekteyiz. Bu bilgiye dayanarak diziler üzerinde şöyle bir muhakemede bulunabiliriz…

Biliyorsunuz ki, C#’ta diziler System.Array sınıfı türünden yapılardır. Haliyle managed type kapsamına girmektedirler. İşte bu yüzden diziler üzerinde pointerlar ile çalışacaksak fixed anahtar sözcüğü olmaksızın bu işlem pek mümkün olmayacaktır.

Kâh fixed ile ilgili dizinin içerisindeki değerlerin bellek adreslerini garbage collector’a karşı sabitleyeceğiz kâh bir başka yöntem olarakta stackalloc keywordü ile unmanaged type(yönetilmeyen tip) diziler oluştururuz. Tabi bu içeriğimizde birincil öncüldeki yöntemi, yani fixed yapısı ile diziler üzerinde pointer çalışmasını ele alacağız.

Öncelikle dizilerin fixed keywordü olmaksızın göstericilerle kullanılamayacağını aşağıdaki ekran görüntüsünden görmekteyiz.
C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII

Halbuki aşağıdaki gibi fixed yapısında göstericilerle dizilerde rahatlıkla çalışabilmekteyiz.

Göstericiler ile dizi işlemleri yapısal olarak bu şekilde kullanılmaktadır. Aslında konumuzu burada bitirsek yeridir ama “hoca! dizinin diğer elemanlarına nasıl erişeceğiz?” sorunuzu duyar gibiyim…

Bu işlem için önceki yazılarımdan Göstericilerde Aritmatik İşlemler başlıklı içeriğimde değindiğim yapıları ve mantığı kullanacağız.

Tabi o mantığa gelmeden önce dizilerin bellekteki yerleşke düzenine değinmekte fayda var.

Bir dizi tanımladığımız vakit o dizinin eleman sayısı kadar alan bellekte ardışıl bir şekilde önceden tanımlanmaktadır. Haliyle bir dizinin elemanlarına pointer ile erişmek istiyorsak algoritmik olarak o dizinin herhangi bir elemanının bellek adresi ile dizinin eleman sayısı bu işlemi yapabilmemiz için yeterli bağıntıyı bizlere sağlayacaktır. Yapacağımız algoritmik çalışma ile ilgili dizinin elemanlarını işaretleyen göstericiye (+1 | -1) ekleyerek diğer elemanlara pointer ile rahatlıkla erişebiliriz. Tabi burada dizinin ilk elemanını baz alırsak eğer pointera +1 değerini eklemek işlevsel olarak algoritmamızı daha kolay, mantıklı ve pratik hale getirecektir.

Şimdi aşağıdaki ekran görüntüsünü inceleyiniz.
C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII
Yukarıdaki görüntüde anlatmaya çalıştığım gibi bir dizinin ilk elemanı pointer tarafından işaretlenmekte ve sonraki elemanlara for döngüsü eşliğinde eleman sayısı kadar dönülerek pointera +1 ekleyerek erişilmektedir. Nihayetinde pointerlarda yapılan aritmatik işlemler (pointer += (değer) * sizeof(type)) bağıntısına göre netice verdiği için her bir döngü bir sonraki dizi elemanını getirecektir.

Ayriyetten pointera dizinin referansını direkt olarak verirsek bu tanımlama dizinin ilk elemanına tekabül edecektir.C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII

Dizinin referansı ile dizinin ilk elemanının bellek adresini aşağıdaki gibi yazdırırsak eşit olduklarını göreceksiniz.C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII

Göstericiler ile dizi işlemlerini fixed anahtar sözcüğü kapsamında ele almış olduk. Bir sonraki makalemizde; göstericiler ile dizi işlemlerini, bu içeriğimizde de bahsettiğimiz gibi stackalloc anahtar sözcüğü ile unmanaged type(yönetilmeyen tip) diziler oluşturarak ele alacağız.

O halde görüşmek üzere diyelim…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 23 Mayıs 2017

    […] önceki C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemleri – VIII başlıklı makalemizde göstericiler ile dizi işlemlerini fixed keywordü ile ele almıştık. Bu […]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir