Como posso exibir um endereço de ponteiro em C#?
Pergunta
Eu não fiz nenhuma dica desde que estou programando em C# - e meus dias C ++ foram há muito tempo. Eu pensei que deveria refrescar meu conhecimento e estava apenas brincando com eles por causa de outra pergunta aqui. Eu entendo todos eles bem, mas não consigo descobrir como escrever o endereço do ponteiro no console ...
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";
Usando Console.WriteLine(*cp);
Me dá o valor atual no endereço do ponteiro ... e se eu quiser exibir o endereço real?
Solução
Console.WriteLine(new IntPtr(cp));
Outras dicas
Lembre -se de que, com o código gerenciado, o coletor de lixo é livre para mover as coisas em você. Tenha certeza de alfinete Seu objeto para baixo se você estiver em uma situação em que o endereço é importante.
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);
Converta seu ponteiro em tipo de byte.
char c = 'c';
unsafe
{
Console.WriteLine("0x{0:x}", (ulong)&c);
Console.WriteLine($"0x{(ulong)&c:x}");
}
Isso exibirá algo como ... 0x123ABC (duas vezes)