C#值类型、引用类型打印出内存地址的方法

值类型和引用类型去查看内存地址的方法不一样。

值类型: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));

   }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何...
    胤醚貔貅阅读 10,330评论 1 29
  • 1.String与Stringbuilder的区别: String自动分配内存大小,每次往里面写新东西,就会重新分...
    夕望有你阅读 4,647评论 0 0
  • 基础 .NET概述 参考:http://www.cnblogs.com/yplong/p/3279934.html...
    donite阅读 5,572评论 0 8
  • 目录本次给大家介绍的是我收集以及自己个人保存一些.NET面试题第二篇简介1.接口2.您在什么情况下会用到虚方法或抽...
    寒剑飘零阅读 5,987评论 0 10
  • 知识点: 注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1 为负 8.4作业 A:1、风力预警系...
    cGunsNRoses阅读 4,763评论 0 0

友情链接更多精彩内容