C# 如何通过变量查找分配的内存?

C# 如何通过变量查找分配的内存?,c#,c++,c,windows,C#,C++,C,Windows,可以通过x变量获取分配的内存地址吗 示例可以是C、C++、C#或D。 我希望这是清楚的 在C和C++中提前感谢 < P>这是相当直接的。我将用C++给出示例: class app { public int x = 3; static void Main(string[] args) { } } 当然没有“变量App::x”这样的东西,因为App只是类型。此类型的每个实例(例如示例中的a)都携带自己的成员变量集,并且很容易获得指

可以通过
x
变量获取分配的内存地址吗

示例可以是
C
C++
C#
D
。 我希望这是清楚的
在C和C++中提前感谢

< P>这是相当直接的。我将用C++给出示例:

class app {
        public int x = 3; 

        static void Main(string[] args)
        {
        }
}
当然没有“变量
App::x
”这样的东西,因为
App
只是类型。此类型的每个实例(例如示例中的
a
)都携带自己的成员变量集,并且很容易获得指向成员变量的指针。(C中的普通数据结构也是如此。)

<>注意C++有另一个相关的特征:成员指针。这允许我们形成不透明值
int-App::*pm=&App::x
,它本身并不指向任何东西,但只携带类内
App::x
偏移量的信息(如果需要)。此动物可与实例一起使用以获取实际值,例如,
a.*pm

在大多数类似C的语言中,符号(
&
)是运算符的“地址”:

struct App
{
   int x;
   App() : x(3) { }
};

int main()
{
  App a;
  int * p = &a.x; // address goes here
}

&
的返回值实际上是其操作数的a。

跳过D和E.C#和F#(以及其他CLR语言)-一般来说,任何局部变量都没有固定的地址。可以使用托管调试器(即WinDbg+SOS)查找任何特定变量的地址,或者与互操作类一起使用
fixed

添加:只有当变量驻留在堆上时,才需要fixed。做一个整数i=0;int*pi=&i;在不安全代码中完全有效进一步添加:
fixed
仅当变量驻留在托管堆上时才需要。在互操作场景中,您还拥有本机Win32堆,并且堆上的所有变量都是固定的。有人想更详细一点吗?我的回答没有错。
int x;
printf("Address of x is %p\n", &x);