using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
int[] iArray = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
void Start()
{
Method();
}
unsafe void Method()
{
fixed (int* ptr = &iArray[0])
{
for (int i = 0; i < iArray.Length; i++)
{
Debug.Log(*(ptr + i));//值
//Debug.Log((int)(ptr + i));//地址
}
}
}
}
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。
fixed 语句可防止垃圾回收器重新定位可移动的变量。 fixed 语句仅允许存在于不安全的上下文中。 因此在fixed(...){...}里数据的内存位置不会被改变,这样就可用指针来取数组中的值;
注:Debug.Log(*(ptr + i));中的+i的值指的是 指针移动当前指针类型的大小。指针类型为int、i=1时指针会移动4个字节;指针类型为byte、i=1时会移动1个字节的位置。
C#unsafe示例:使用fixed语句处理数组和指针

本文介绍了如何在C#中使用`unsafe`修饰符创建并操作数组指针,使用`fixed`语句锁定内存,确保数组在固定位置,以便于访问和调试。
753

被折叠的 条评论
为什么被折叠?



