使用指针访问数组元素

在 C#中,数组名称和指向与数组数据相同的数据类型的指针不是相同的变量类型。例如,int *pint[] p 不是同一类型。你可以增加指针变量 p,因为它没有在内存中修复,但是数组地址在内存中是固定的,你不能增加它。

因此,如果你需要使用指针变量访问数组数据,就像我们传统上在 C 或 C++中那样,你需要使用 fixed 关键字修复指针。

以下示例演示了这一点:

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();
      }
   }
}

编译并执行上述代码时,会产生以下结果:

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