如何通过变量找到分配的内存?

时间:2011-11-22 02:58:12

标签: c# c++ c windows

class app {
        public int x = 3; 

        static void Main(string[] args)
        {
        }
}

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

示例可以在CC++C#D中。 我希望很清楚 提前致谢

3 个答案:

答案 0 :(得分:4)

在C和C ++中,这是相当简单的。我将在C ++中给出示例:

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

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

当然没有“变量App::x”,因为App只是类型。此类型的每个实例(例如示例中的a)都带有自己的成员变量集,并且很容易获得指向成员变量的指针。 (对于C中的普通数据结构也是如此。)

请注意,C ++还有另一个相关的功能:成员指针。这允许我们形成不透明值int App::*pm = &App::x,它本身不指向任何内容,但只携带有关类内App::x偏移量的信息,如果你愿意的话。可以将与实例一起使用以获得实际值,例如, a.*pm

答案 1 :(得分:4)

&符号(&)是大多数C语言中的“address-of”运算符:

int x;
printf("Address of x is %p\n", &x);

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

答案 2 :(得分:1)

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