C#使用Runtime.InteropServices打印变量的内存地址

  • 以前不管是在C还是OC语言以及swift中还是其他语言中,当我们认为两个变量使用的是同一块内存地址的时候
  • 最简单的方法就是直接打印地址,然而在C#中,打印地址却变得不那么容易了
    首先,需要引入System.Runtime.InteropServices;
    之后才能使用使用一些手段进行地址的打印
using System;  
// 获取地址需要引入的库  
using System.Runtime.InteropServices;   
  
class MainClass  
{  
    public static string getMemory(object o) // 获取引用类型的内存地址方法  
    {  
        GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);  
        IntPtr addr = h.AddrOfPinnedObject();  
        return "0x" + addr.ToString("X");  
    }  
  
    public static void Main (string[] args)  
    {  
  
        int[] a = new int[1];  
        int[] b = new int[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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,702评论 4 61
  • 在这个虐狗的节日里,小编其实并不想表达什么 ...
    璞岸阅读 1,513评论 0 1
  • 我们会喜怒哀乐,有许多的心情,我们会哭会笑,也会心痛,也会欢乐。 我们的心碎的时候,我们会痛苦,会悲伤;我们干了一...
    悲伤而又微猫阅读 1,526评论 0 0
  • 刚才做了一个冗长的梦。 梦里你抱着你的孩子,我抱着我的孩子,隔着马路就那么望着彼此,一句话也说不出来,泪流满面。
    蓬蓬蓬的毛毛熊阅读 1,049评论 6 0

友情链接更多精彩内容