C#使用Runtime.InteropServices打印變量的內(nèi)存地址

  • 以前不管是在C還是OC語言以及swift中還是其他語言中,當(dāng)我們認(rèn)為兩個(gè)變量使用的是同一塊內(nèi)存地址的時(shí)候
  • 最簡單的方法就是直接打印地址,然而在C#中,打印地址卻變得不那么容易了
    首先,需要引入System.Runtime.InteropServices;
    之后才能使用使用一些手段進(jìn)行地址的打印
using System;  
// 獲取地址需要引入的庫  
using System.Runtime.InteropServices;   
  
class MainClass  
{  
    public static string getMemory(object o) // 獲取引用類型的內(nèi)存地址方法  
    {  
        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的地址,此時(shí)a和b表示同一個(gè)內(nèi)存空間地址  
        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));  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,036評(píng)論 4 61
  • 在這個(gè)虐狗的節(jié)日里,小編其實(shí)并不想表達(dá)什么 ...
    璞岸閱讀 227評(píng)論 0 1
  • 我們會(huì)喜怒哀樂,有許多的心情,我們會(huì)哭會(huì)笑,也會(huì)心痛,也會(huì)歡樂。 我們的心碎的時(shí)候,我們會(huì)痛苦,會(huì)悲傷;我們干了一...
    悲傷而又微貓閱讀 238評(píng)論 0 0
  • 剛才做了一個(gè)冗長的夢。 夢里你抱著你的孩子,我抱著我的孩子,隔著馬路就那么望著彼此,一句話也說不出來,淚流滿面。
    蓬蓬蓬的毛毛熊閱讀 117評(píng)論 6 0

友情鏈接更多精彩內(nèi)容