2013-05-14 50 views
2

新指針和C#中不安全的世界。我正在通過指針獲取變量的內存地址,在這裏或那裏移動一些東西,基本上學習。如何寫入內存地址?

static unsafe void M() 
{ 
    var i = 1; 
    var p = &i; //gets memory location of variable i here 

    //how do I write to location p, say a value of 100? 
} 

我想知道是否有辦法寫入特定位置?如果我可以同時閱讀和書寫,它可以幫助我們瞭解發生了什麼。

沒有實用的目的,只是學習。或者用C#不可能?

回答

1

您需要將指針與*運算符取消引用。例如:

*p = 100; 
1

像這樣

*p = 100; 

Console.WriteLine(i); // prints 100; 
1

你需要尊重它。

這裏有一個LINQPad片段:

int i = 1; 

unsafe 
{ 
    var p = &i; 

    *p = 100; 
} 

i.Dump(); 

這個輸出 「100」,符合市場預期。

+0

你知道你的答案和這種方法'Marshal.WriteInt32(new IntPtr(p),100)'有什麼區別嗎?兩者都很好。 – nawfal

+1

@nawfal,'Marshal'包含大量用於處理非託管內存的方法,如果您檢查MSDN,您會注意到它們未被標記爲不安全。 –