Как я могу отобразить адрес указателя в C #? - PullRequest
15 голосов
/ 13 января 2010

Я не делал никаких указателей, так как я программировал на C # - и мои дни на C ++ были давно. Я подумал, что должен освежить свои знания и просто поиграть с ними из-за другого вопроса здесь. Я понимаю их все в порядке, но я не могу понять, как записать адрес указателя на консоль ...

char c = 'c';
char d = 'd';
char e = 'e';

unsafe
{
    char* cp = &d;
    //How do I write the pointer address to the console?
    *cp = 'f';
    cp = &e;
    //How do I write the pointer address to the console?
    *cp = 'g';
    cp = &c;
    //How do I write the pointer address to the console?
    *cp = 'h';        
}
Console.WriteLine("c:{0}", c); //should display "c:h";
Console.WriteLine("d:{0}", d); //should display "d:f";
Console.WriteLine("e:{0}", e); //should display "e:g";

Использование Console.WriteLine(*cp); дает мне текущее значение по адресу указателя ... что, если я хочу отобразить фактический адрес?

Ответы [ 5 ]

20 голосов
/ 13 января 2010
Console.WriteLine(new IntPtr(cp));
4 голосов
/ 13 января 2010

Помните, что с помощью управляемого кода сборщик мусора может свободно перемещать вещи вокруг вас. Обязательно закрепите ваш объект вниз, если вы находитесь в ситуации, когда адрес имеет значение.

1 голос
/ 22 августа 2015
char* cptr;
char achr = 'a';
cptr = &achr;
string strcptr = Convert.ToString((long)cptr, 16);
Console.WriteLine("Ox{0} is the char ptr hex address", strcptr);
0 голосов
/ 26 июня 2017
char c = 'c';

unsafe
{
  Console.WriteLine("0x{0:x}", (ulong)&c);
  Console.WriteLine($"0x{(ulong)&c:x}");
}

Это отобразит что-то вроде ... 0x123abc (дважды)

0 голосов
/ 13 января 2010

Преобразовать указатель в тип байта.

...