例如: int[] ary; Intptr inp=Marshal..UnsafeAddrOfPinnedArrayE

时间:2022-01-11 06:34:32

 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的值