2012-02-21 15 views
15

tengo este código:Visualización de la dirección de una cadena

char* hello = "Hello World"; 
std::cout << "Pointer value = " << hello << std::endl; 
std::cout << "Pointer address = " << &hello << std::endl; 

Y aquí está el resultado:

Pointer value = Hello World 
Pointer address = 0012FF74 

Cuando puedo depurar a mi programa usando OllyDbg, veo que el valor de 0x0012FF74 es por ej. 0x00412374.

¿Hay alguna forma de que pueda imprimir la dirección real a la que apunta hello?

Respuesta

23

Si usa &hello imprime la dirección del puntero, no la dirección de la cadena. Emitir el puntero a void* para usar la sobrecarga correcta de operator<<.

std::cout << "Pointer address = " << static_cast<void*>(hello) << std::endl; 
4

no tengo un compilador, pero probablemente las siguientes obras:

std::cout << "Pointer address = " << (void*) hello << std::endl; 

Motivo: hola utilizando sólo trataría es como una cadena (matriz de caracteres), echándola por un vacío que será puntero se muestra como dirección hexadecimal

2

más o menos:

std::cout << "Pointer address = " << &hello[0] << std::endl; 
0

Esto también funciona:

std::cout << "Pointer address = " << (int *)hello << std::endl; 
+0

favor añadir alguna explicación, así si es posible. –

+1

Esto puede causar un comportamiento indefinido si 'hello' no está alineado correctamente para' int'. Dado que la versión con 'void *' funciona, no hay ninguna razón para usar esto. –

Cuestiones relacionadas