2012-02-21 29 views
15

Bu kodu vardır: Buradabir dize adresini gösteriliyor

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

Ve sonuç: Ben OllyDbg kullanarak programa hata ayıklama

Pointer value = Hello World 
Pointer address = 0012FF74 

, görüyorum 0x0012FF74 değeri örneğin 0x00412374.

Gerçek adresi hello'un yazdırabilmesinin herhangi bir yolu var mı? öyle olacak işaretçisi bir boşluk onu kopartarak, merhaba bir dize (char dizi) gibidir davranacağını sadece kullanılarak:

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

Sebep: Herhalde bir derleyici ancak aşağıdaki işleri yok

cevap

23

&hello kullanırsanız, dizenin adresini değil işaretçinin adresini yazdırır. operator<< doğru aşırı yüklenmesini kullanmak için işaretçiyi void*'a gönderin.

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

hex adresi olarak gösterilir.

2

kadar:

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

Bu aynı zamanda çalışır:

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

yanı mümkünse biraz açıklama ekleyin. –

+1

"Merhaba", "int" için doğru şekilde hizalanmamışsa, tanımlanmamış davranışa neden olabilir. Void * 'çalışmasına sahip olan versiyonun kullanılmasının herhangi bir nedeni olmadığını göz önünde bulundurun. –