1. 获取数组的指针(IntPtr)

通过Marshal. UnsafeAddrOfPinnedArrayElement(Array,Int32) 方法获得一个数组的第某个元素的内存地址。

Array是数组,Int32是元素的索引,第一个元素是0。

int[] ary;

Intptr inp=Marshal. UnsafeAddrOfPinnedArrayElement( ary,0);

Console.Writleline(inp.Tostring());//输出的就是一串数字,就是内存地址。

内存地址以字节为单位,第一个元素地址为n,第二个为n+数据类型的字节数。int32是4个字节,那么元素地相邻址之间差4。

2.获取某个变量的指针

这里就要用到C#中的指针,用unsafe {}关键字,并设置【项目属性】-【生成】-可以执行不安全代码.

具体详细信息见:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/unsafe-code-pointers/

int ad;

unsafe

int* p=&ad; //建立指针P,指向变量ad

Console.Write((int)p); //ad的内存地址

Console.Write(*p); //引用p指向的数据,即ad

IntPtr op=new IntPtr((int)p);//构造c#类型的指针

Console.Write(Marshal.ReadInt32(op));//输出的是变量ad的值

//跟指针p相关的变量只能出现在unsafe{}内部,外部无法使用