在C#中,IntPtr
是一個整數類型,用于表示指針
System.Runtime.InteropServices
命名空間,以便使用Marshal
類。Marshal.AllocHGlobal()
方法分配內存。Marshal.Copy()
方法將數據從托管內存復制到非托管內存。IntPtr
操作指針。Marshal.FreeHGlobal()
方法釋放內存。下面是一個簡單的示例,說明如何在C#中使用IntPtr
處理指針:
using System;
using System.Runtime.InteropServices;
class Program
{
static unsafe void Main()
{
int[] managedArray = new int[] { 1, 2, 3, 4, 5 };
int size = sizeof(int) * managedArray.Length;
// 分配非托管內存
IntPtr unmanagedPointer = Marshal.AllocHGlobal(size);
// 將托管數組復制到非托管內存
Marshal.Copy(managedArray, 0, unmanagedPointer, managedArray.Length);
// 使用IntPtr操作指針
unsafe
{
int* ptr = (int*)unmanagedPointer.ToPointer();
for (int i = 0; i< managedArray.Length; i++)
{
Console.WriteLine("Value at index {0}: {1}", i, *(ptr + i));
}
}
// 釋放非托管內存
Marshal.FreeHGlobal(unmanagedPointer);
}
}
在這個示例中,我們首先創建了一個整數數組managedArray
,然后分配了足夠的非托管內存來存儲該數組。接下來,我們使用Marshal.Copy()
方法將數據從托管數組復制到非托管內存。然后,我們使用IntPtr
和指針運算符操作非托管內存。最后,我們使用Marshal.FreeHGlobal()
方法釋放內存。