我正在学习更多关于C#的知识,并且想知道如何显示引用的实际值或结构的地址。我正在寻找类似于以下C代码的东西:
int i;
printf("int i resides at memory location %x",&i);
答案 0 :(得分:8)
在unsafe
上下文中,这将在C#中起作用:
int i = 10;
int *ptr = &i;
Console.WriteLine((int)ptr);
我不知道它是否可以在安全的环境中完成,或者,如果是,如何(我怀疑它不能)。
答案 1 :(得分:6)
这在C#中无法完成,我知道。 .NET可以随心所欲地移动存储块,因此变量的地址最多只能保留临时含义。
答案 2 :(得分:0)
虽然可以在某些情况下执行此操作,但结果却毫无意义。正如已经指出的那样,References are not addresses - 或者至少,他们没有拥有。因此,即使它正在运行,您所尝试的内容并非在所有实现中得到保证,并且通常不是特别有用。如果您没有固定,则该值不可靠,如果您执行固定,则更改您报告的内容...
真的,你应该在 + 之外使用不同的工具这个...例如windbg + SOS。