2013-05-14 2 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; 

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

. 예상대로,

int i = 1; 

unsafe 
{ 
    var p = &i; 

    *p = 100; 
} 

i.Dump(); 

이 "100"를 출력합니다

는 여기 LINQPad 조각입니다.

1

처럼

*p = 100; 
+0

당신의 대답과이 접근법의 차이점은 무엇인지 아십니까? 'Marshal.WriteInt32 (new IntPtr (p), 100)'? 둘 다 잘 작동합니다. – nawfal

+1

@nawfal,'Marshal'에는 관리되지 않는 메모리로 작업하기위한 전체 호스트가 포함되어 있으며 MSDN을 확인하면 안전하지 않은 것으로 표시되지 않습니다. –

관련 문제