Подтвердить что ты не робот

Как я могу отобразить адрес указателя в С#?

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

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); дает мне текущее значение в адресе указателя... что, если я хочу отобразить фактический адрес?

4b9b3361

Ответ 1

Console.WriteLine(new IntPtr(cp));

Ответ 2

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

Ответ 3

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

Ответ 4

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);

Ответ 5

char c = 'c';

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

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