0

我对 c# 中的 AddressOf 和 c++ 中的指针感到困惑?我对 Addressof 是管理执行而指针是非管理执行还是其他什么是正确的?

4

2 回答 2

2

AddressOf 是一个 VB 运算符,在 C# 中不存在。它创建一个过程的委托。以后可以使用委托在不包含过程名称的代码中调用过程。

C/C++ 中的指针是内存中地址的表示。您可以创建一个指向函数的指针并使用它来调用该函数,因此在这种特殊情况下,指针和委托的行为相似。但是,委托不仅仅是函数指针。最重要的区别是委托可以被链接起来,并一次调用多个过程。

于 2009-12-15T06:19:05.960 回答
1

来自 MSDN 的示例讲述了大部分故事:

int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());

这会将 number 变量的地址分配给指向 int 的指针 p。

这有一些问题: 1. 您要获取其地址的变量必须被初始化。对于默认值类型不是问题,但对于引用类型是问题。

  1. 在 .NET 中,变量可以在您不知道的情况下在内存中移动。如果你需要处理一个变量的地址,你真的想用fixed将变量固定在RAM中。

  2. & 只能应用于变量,不能应用于常量或值。(换句话说,你不能使用像 int* p = &GetSomeInt(); 这样的结构)

  3. 同样,您的代码必须在不安全模式下编译,这会标记 CLR,您将使用托管代码“安全网”之外的功能。

于 2009-12-15T06:16:17.417 回答