c#初始化后修复指针

时间:2016-11-26 18:20:39

标签: c# pointers

我试图了解如何使用C#指针。我有:

unsafe public class Actionable
{
    public Vector3* aim;
}  

和:

unsafe public class Ship : Actionable
{
    public Ship()
    {
        // generates error: cannot use the fixed statement to take the address
        // of an already fixed expression
        fixed(aim = &(gameObject.GetComponent<Transform>().localEulerAngles));

        // generates error: Cannot take the address of the given expression
        aim = &(gameObject.GetComponent<Transform>().localEulerAngles);

        // works fine (apparently)
        *aim = gameObject.GetComponent<Transform>().localEulerAngles;
    }
}

问题1:根据this link和网络上的其他来源,unsafe所做的只是将curlies之间的代码标记为需要程序员特别关注示例代码fixedunsafe范围内明确使用。那为什么我会收到错误

  

不能使用fixed语句来获取已经修复的地址   表达

在WWW上搜索错误后,我发现this link表示unsafe自动固定(修复?)指针对象的地址。有时我得到一个错误说明&#34;

  

指针和固定大小的缓冲区只能在不安全的上下文中使用

我很困惑。

问题2:为什么*aim = (...)有效但aim = &(...)没有(因为它已修复)? 如果你想知道为什么我需要指针,答案是 A.可读性。我会使用别名(来自C ++的参考),但C#错过了它。或者是来自C ++的#define,但C#还没有 B.绕过不必要的执行,因为它只是访问变量的问题,不执行(隐藏或其他)例程或方法。我发现变量I&#39;我试图访问实际上是一个属性 编辑: 看起来只是解除引用没有帮助,我需要访问内存地址。

1 个答案:

答案 0 :(得分:0)

* aim 有效,因为您将gameObject.GetComponent<Transform>().localEulerAngles分配给指针的值而非指针。

目标不起作用,因为您无法获取属性的地址。这只能在Field上完成。