我试图了解如何使用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之间的代码标记为需要程序员特别关注示例代码fixed
在unsafe
范围内明确使用。那为什么我会收到错误
不能使用fixed语句来获取已经修复的地址 表达
在WWW上搜索错误后,我发现this link表示unsafe
自动固定(修复?)指针对象的地址。有时我得到一个错误说明&#34;
指针和固定大小的缓冲区只能在不安全的上下文中使用
我很困惑。
问题2:为什么*aim = (...)
有效但aim = &(...)
没有(因为它已修复)?
如果你想知道为什么我需要指针,答案是
A.可读性。我会使用别名(来自C ++的参考),但C#错过了它。或者是来自C ++的#define,但C#还没有
B.绕过不必要的执行,因为它只是访问变量的问题,不执行(隐藏或其他)例程或方法。我发现变量I&#39;我试图访问实际上是一个属性
编辑:
看起来只是解除引用没有帮助,我需要访问内存地址。
答案 0 :(得分:0)
* aim 有效,因为您将gameObject.GetComponent<Transform>().localEulerAngles
分配给指针的值而非指针。
目标不起作用,因为您无法获取属性的地址。这只能在Field上完成。