C# Language Accedere agli elementi dell'array usando un puntatore

Esempio

In C #, un nome di matrice e un puntatore a un tipo di dati identico ai dati dell'array, non sono lo stesso tipo di variabile. Ad esempio, int *p e int[] p , non sono dello stesso tipo. È possibile incrementare la variabile del puntatore p perché non è fissata in memoria, ma un indirizzo di array è fisso in memoria e non è possibile incrementarlo.

Pertanto, se è necessario accedere a dati di array utilizzando una variabile puntatore, come facciamo tradizionalmente in C o C ++, è necessario correggere il puntatore utilizzando la parola chiave fixed.

Il seguente esempio dimostra questo:

using System;
namespace UnsafeCodeApplication
{
   class TestPointer
   {
      public unsafe static void Main()
      {
         int[]  list = {10, 100, 200};
         fixed(int *ptr = list)
         
         /* let us have array address in pointer */
         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();
      }
   }
}

Quando il codice sopra riportato è stato compilato ed eseguito, produce il seguente risultato:

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