2014-12-19 34 views
3

我应该在C#中做一个项目来展示列表如何工作。我可以在C#中获取变量或对象的物理地址吗?

我想这是在这样的图形界面来显示一个好主意:

-in“值”字段:节点的值
-in“下一步”字段:下一个节点

的物理地址

这可能吗?

+0

如果您的目的是演示如何使用内存,那么您的'List'实现也可以包含*高级*内存管理。 – Sinatr 2014-12-19 09:07:19

+1

除非变量是'fixed',否则不能保证它不会改变位置.http://msdn.microsoft.com/en-gb/library/f58wzh21%28v=vs.80%29.aspx – Jodrell 2014-12-19 09:08:21

+0

值得注意的是通常可以在垃圾回收期间移动托管变量,因为垃圾回收器可以(也将)对内存进行碎片整理 – 2014-12-19 09:10:23

回答

3

是的,不安全的代码(至少虚拟地址,而不是原始的物理内存地址,但这正是你想要的)。

有关详细信息,请参阅MSDN: How to: Obtain the Address of a Variable (C# Programming Guide)。它会指导您编译以下示例(它需要在项目属性或/unsafe开关中启用不安全的代码)以及获取可移动变量位置时可能遇到的陷阱,这些陷阱需要关键字fixed停留在相同位置,基本上说。

int number; 
int* p = &number; //address-of operator & 
+0

C#或C++或C? – 2014-12-19 09:06:35

+6

这个问题是关于C#的,所以我的答案也是这样)的确,不安全的C#代码看起来很像C/C++。 – 2014-12-19 09:07:02

+1

@PranitKothari,运行链接,你会得到你的答案... – 2014-12-19 09:07:20

相关问题