2010-01-13 9 views
12

No he hecho ningún puntero desde que he estado programando en C# - y mis días en C++ fueron hace mucho tiempo. Pensé que debería actualizar mi conocimiento y solo estaba jugando con ellos por otra pregunta aquí. Los entiendo todo bien, pero no puedo encontrar la manera de escribir la dirección del puntero a la consola ...¿Cómo puedo mostrar una dirección de puntero en 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"; 

Usando Console.WriteLine(*cp); me da el valor actual en la dirección del puntero ... lo que si quiero para mostrar la dirección real?

+0

no probado, pero lo que hace Console.WriteLine (cp); ¿darte? – Lazarus

+0

@Lazarus - ¿No crees que fue lo primero que intenté? LOL. Dame un poco de crédito, ya había intentado todo lo obvio antes de venir a hacer preguntas aquí;) – BenAlabaster

Respuesta

16
Console.WriteLine(new IntPtr(cp)); 
+0

Para trabajar correctamente con los punteros dentro de C# tomar el uso de la clase IntPtr – Oliver

0

Convierta su puntero a tipo de byte.

4

Recuerde que con el código administrado, el recolector de basura es libre de cambiar cosas en usted. Asegúrese de pin su objeto abajo si está en una situación donde la dirección importa.

+0

Gracias Joel, no había considerado eso todavía. Como dije, solo estaba jugando, no he tenido ningún requisito real para usar punteros en mis proyectos de C#. – BenAlabaster

0
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

woops, significa que no flota en el mensaje de escritura de la consola. – Alan

+0

y vuelve a funcionar. – Alan

+0

string strcptr = Convert.ToString ((largo) cptr, 16); Console.WriteLine ("Ox {0} es la dirección hexadecimal del controlador", strcptr); – Alan

0
char c = 'c'; 

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

Esto mostrará algo como ... 0x123abc (dos veces)

Cuestiones relacionadas