C#’ta Gösterici(Pointer) – Göstericiler İle Dizi İşlemlerinde char Değerinin null Kontrolü – XII

Merhaba,

Aslında bir önceki C#’ta Gösterici(Pointer) – struct Türünden Göstericiler ve “->”(Ok) Operatörü – XI başlıklı içeriğimiz ile gösterici yazı dizimizi noktalamıştık. Her ne kadar son noktayı koymuş olsakda gösterici ile belleksel işlemler gerçekleştirirken karşılaşabileceğiniz olası bir duruma dair ek bilgi vermeksizin bu yazı dizisini sonlandırmak, benim nacizane amacımın yerini bulmamasına sebep olacaktır.

Peki nedir bu yazıda anlatmak istediğim?
Hemen başlayalım.

Kâh göstericileri yeni öğreniyor olun kâh göstericiler ile birçok defa belleklere müdahalede bulunun fark etmeksizin göreceksiniz ki, işaretçileri genellikle karakter işlemlerinde kullanmaktayız.

Biliyorsunuz ki, C#’ta string ifadeler aslen char dizisidirler ve bellekte tek tek karakter olarak ardışıl bir şekilde tutulmaktadırlar. Haliyle bir string ifadeyi char dizisi gibi ele alıp göstericiye aşağıdaki gibi atayabilmekteyiz.

            unsafe
            {
                string Isim = "Gençay Yıldız";
                fixed (char* isimPointer = Isim)
                    for (int i = 0; i < Isim.Length; i++)
                        Console.WriteLine(isimPointer[i]);
                Console.Read();
            }

Aslında buraya kadar yapmış olduğumuz şu ana kadar ele aldığımız, incelediğimiz, irdelediğimiz daha doğrusu bildiğimiz şeylerdir. Benim asıl değinmek istediğim nokta, ya ilgili string ifade bir değişken üzerinden değilde aşağıdaki gibi direkt olarak değer üzerinden fixed yapısı içerisinde char dizisi olarak elde edilse? ? ?

            unsafe
            {
                fixed (char* isimPointer = "Gençay Yıldız")
                    for (int i = 0; i < ??; i++)
                        Console.WriteLine(isimPointer[i]);
                Console.Read();
            }

Bir önceki kod bloğunda metinsel ifade bir değişkenden geldiği için for döngüsünde değişkenin Length özelliği ile değerinin karakter uzunluğunu elde edebiliyorduk. Ama yukarıdaki kod bloğunu incelersek eğer metinsel ifadeyi temsil eden bir değişken olmadığı için for döngüsünde manuel değer yazamayacağımıza göre nasıl bir yaklaşımda bulunmamız gerekmektedir sorusuna cevap bulmaktır niyetim…

İşte böyle bir durumda char* tipinden pointerın dizisel değeri “Gençay Yıldız” metinsel yapısından geldiği için char türü yazının neresinde sonlandığını bilemeyecektir. İşte bu olası bilinmezlik durumunda “n” karakterden sonra null değerini ifade eden ‘\0″ ifadesini aşağıdaki gibi kullanmak yeterli olacaktır.

            unsafe
            {
                fixed (char* isimPointer = "Gençay Yıldız")
                    for (int i = 0; isimPointer[i] != '\0'; i++)
                        Console.WriteLine(isimPointer[i]);
                Console.Read();
            }

Göstericilerle dizi işlemleri yaparken char türünde çalışıyorsak eğer ‘\0’ ifadesi ilgili metinsel ifadenin sonuna yani daha doğrusu char dizisinin sonuncu elemanına gelinmiş olduğunu göstermektedir.

Umarım anlatmak istediğimi net bir şekilde izah edebilmişimdir.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

Bir cevap yazın

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

*

Copy Protected by Chetan's WP-Copyprotect.