C# c中的AddressOf和c+中的指针有什么区别+; 我在C语言中的指针和C++中的指针混淆了吗? Addressof是manage execution,pointer是unmanage execution或其他东西,我说的对吗?

C# c中的AddressOf和c+中的指针有什么区别+; 我在C语言中的指针和C++中的指针混淆了吗? Addressof是manage execution,pointer是unmanage execution或其他东西,我说的对吗?,c#,c++,pointers,c++-cli,address-operator,C#,C++,Pointers,C++ Cli,Address Operator,来自MSDN的示例讲述了大部分故事: int number; int* p = &number; Console.WriteLine("Value pointed to by p: {0}", p->ToString()); 这将数字变量的地址分配给指向int p的指针 这其中有一些陷阱: 1.必须初始化要获取其地址的变量。值类型(默认值)没有问题,但引用类型有问题 在.NET中,变量可以在内存中移动,而不需要您意识到它。如果您需要处理一个变量的地址,那么您确实希望使用fixed

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

int number;
int* p = &number;
Console.WriteLine("Value pointed to by p: {0}", p->ToString());
这将数字变量的地址分配给指向int p的指针

这其中有一些陷阱: 1.必须初始化要获取其地址的变量。值类型(默认值)没有问题,但引用类型有问题

  • 在.NET中,变量可以在内存中移动,而不需要您意识到它。如果您需要处理一个变量的地址,那么您确实希望使用fixed将该变量固定在RAM中

  • &只能应用于变量,而不是常量或值。(换句话说,您不能使用像int*p=&GetSomeInt();)这样的构造)

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


  • MSDN中的示例讲述了大部分故事:

    int number;
    int* p = &number;
    Console.WriteLine("Value pointed to by p: {0}", p->ToString());
    
    这将数字变量的地址分配给指向int p的指针

    这其中有一些陷阱: 1.必须初始化要获取其地址的变量。值类型(默认值)没有问题,但引用类型有问题

  • 在.NET中,变量可以在内存中移动,而不需要您意识到它。如果您需要处理一个变量的地址,那么您确实希望使用fixed将该变量固定在RAM中

  • &只能应用于变量,而不是常量或值。(换句话说,您不能使用像int*p=&GetSomeInt();)这样的构造)

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


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


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

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

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