8 Haziran 2017 Perşembe

Pointer Kullanarak Array Elemanlarına Erişim (Accessing Array Elements Using a Pointer)

C#'da bir array ile bu array verisi ile aynı veri tipinde (int,char,string,vs..) olan pointer aslında aynı değişken tipinde değildirler. Peki bu ne demek. Örneğin, int *v ile int[] v aynı türden değişkenler değildir. Pointer olan değişkenin değeri artırılabilir veya azaltılabilir çünkü bu değer memoryde sabit değildir fakat array adresi memory üzerinde sabittir ve değiştirilemez.

Bu nedenle array verisine pointer kullanarak erişmek istiyorsak, C ve C++'daki gibi fixed keywordünü kullanmamız gerekir. Aşağıdaki gibi bir örnekle açıklamaya çalışalım.

using System;
namespace UnsafeCodeApp
{
   class TestPointerCls
   {
      public unsafe static void Main()
      {
         int[]  list = {10, 100, 200};
         fixed(int *ptr = list)
         
         for ( int i = 0; i < 3; i++)
         {
            Console.WriteLine("Address of list[{0}]={1}",i, (int)(ptr + i));
            Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
         }
         
         Console.ReadKey();
      }
   }
}

Yukarıdaki kod compile edilip çalıştırıldığında aşağıdaki gibi bir çıktı verecektir. Main metodunun pointerları çalıştırabilmesi için unsafe tanımladığına dikkat edelim.

Address of list[0] = 31627168
Value of list[0] = 10
Address of list[1] = 31627172
Value of list[1] = 100
Address of list[2] = 31627176
Value of list[2] = 200

Alıntı