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

C#’ta Gösterici(Pointer) – struct Türünden Göstericiler ve “->”(Ok) Operatörü – XI

Merhaba,

Şu ana kadar göstericiler üzerine yazmış olduğumuz yazı dizisinde göstericileri değer tipli değişkenler üzerinde kullandığımızdan bahsettik. Bunun yanı sıra enum ve struct türlerininde işaretçiler eşliğinde kullanılabilir bir yapı arz etmekte olduklarına değindik. Tabi ki de bu içeriğimizde bunun aksisini söylemeyeceğiz. Bilakis struct türünden göstericiler üzerinde biraz daha detaylandırmada bulunacak ve “->”(Ok) operatörünü irdeleyeceğiz.

Biliyorsunuz ki “int”, “char”, “double”, “decimal”, “float” vs. gibi türler değer tipli türlerdir. Yani belleğin stack kısmında tutulmaktadırlar. Ayriyetten her bir değer türü aslen bir struct yani yapıdır. Bu önergenin terside doğrudur. Her bir struct aslen değer tipli bir değişkendir.

Haliyle göstericiler nasıl değer tipli değişkenleri işaretleyebiliyorsa, bu işlem dolayısıyla structlar içinde geçerlidir.

Bir structın, herhangi bir gösterici tarafından işaretlenmesini istiyorsak eğer tek şart o structın üye elemanlarının tamamının değer tipli olması gerekmektedir.

Aşağıdaki kod bloğunu incelerseniz eğer;

    class Program
    {
        static unsafe void Main(string[] args)
        {
            MyStruct m = new MyStruct();
            MyStruct* mpointer = &m;

            Console.Read();
        }
    }
    struct MyStruct
    {
        public int a;
        public bool b;
        public char c;
    }

“MyStruct” isimli structın üye elemanlarının hepsinin değer tipli olması ilgili yapıyı pointerlar ile işaretlemeyi sağlamaktadır.

Ayrıca burada dikkat etmenizi istediğim bir diğer husus, structın üye elemanları içerisinde gene struct tipte elemanlar bulunabilir.

    class Program
    {
        static unsafe void Main(string[] args)
        {
            MyStruct m = new MyStruct();
            MyStruct* mpointer = &m;
            Console.WriteLine((*mpointer).myStruct.MyProperty2);
            Console.Read();
        }
    }
    struct MyStruct
    {
        public int a;
        public bool b;
        public char c;
        public int MyProperty { get; set; }
        public MyStruct2 myStruct { get; set; }
    }
    struct MyStruct2
    {
        public bool MyProperty2 { get; set; }
    }

gibi…

struct içerisinde değer tipte olmayan üye elemanlar, managed type(yönetilen tip) olmasından dolayı göstericiler tarafından işaret edilememektedir. Bu yüzden göstericiler ile işaretlerken struct içerisinde değer tipin dışında başka elemanların bulunmaması gerekmektedir.

“->”(Ok) Operatörü

struct türünden göstericilerin işaretlediği bellek adresindeki değere “*”(yıldız) ve “.”(nokta) operatörleri ile aşağıdaki gibi kolaylıkla erişebilmekteyiz.

C#’ta Gösterici(Pointer) – struct Türünden Göstericiler ve "->"(Ok) Operatörü – XI

“->”(Ok) operatörü ise benzer mantıkla çalışan, sadece struct göstericilerine özel olarak tasarlanmış bir işlevselliğe sahiptir. struct göstericisinin işaretlediği yapının bellek adresindeki nesneyi direkt olarak elde edip üye elemanlarını bizlere getirmektedir.

C#’ta Gösterici(Pointer) – struct Türünden Göstericiler ve "->"(Ok) Operatörü – XI

“->” operatörüyle structın elemanlarına ulaşırken elemanların erişim belirleyicilerinin public olmasına özen gösteriniz.

Bu içeriğimizle de göstericiler dizisi üzerine son makalemizi kaleme almış olduk.
Hayırlı uğurlu olsun.

Umarım bu yazı dizisinde sizlere yardımcı olabilmiş ve niyetimi tam bir şekilde sağ sağlim yerine getirebilmiş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

*