值类型和引用类型去查看内存地址的方法不一样。
值类型:1.先设置编译器可以运行不安全代码
然后像C++一样运用指针去打印:
二:引用类型
1.先引入System.Runtime.InteropServices命名空间
2.代码如下:
usingSystem;
// 获取地址需要引入的库
usingSystem.Runtime.InteropServices;
classMainClass
{
publicstaticstringgetMemory(objecto)// 获取引用类型的内存地址方法
{
GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);
IntPtr addr = h.AddrOfPinnedObject();
return"0x"+ addr.ToString("X");
}
publicstaticvoidMain (string[] args)
{
int[] a =newint[1];
int[] b =newint[1];
// b=0 ,未赋值前b的地址是:0x8008E8
Console.WriteLine("b={0,-2},未赋值前b的地址是:{1}", b[0],getMemory(b));
a[0] = 3;
b = a;// 此句赋值是b引用a的地址,此时a和b表示同一个内存空间地址
b[0] = 33;
// b=33,赋值后b的地址是:0x8008D0
Console.WriteLine("b={0},赋值后b的地址是:{1}", b[0],getMemory(b));
// a=33,a的地址是:0x8008D0
Console.WriteLine("a={0},a的地址是:{1}", a[0],getMemory(a));
}
}