2012-02-21 6 views
15

मैं इस कोड है:एक स्ट्रिंग के पते प्रदर्शित

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

और यहाँ परिणाम है:

Pointer value = Hello World 
Pointer address = 0012FF74 

जब मैं अपने कार्यक्रम OllyDbg का उपयोग करने के डिबग, मुझे लगता है कि 0x0012FF74 का मूल्य उदाहरण है 0x00412374।

क्या कोई तरीका है कि मैं hello अंक के वास्तविक पते को मुद्रित कर सकता हूं?

उत्तर

23

यदि आप &hello का उपयोग करते हैं तो यह सूचक के पते को मुद्रित करता है, स्ट्रिंग का पता नहीं। operator<< के सही अधिभार का उपयोग करने के लिए पॉइंटर को void* पर कास्ट करें।

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

मैं एक संकलक, लेकिन शायद निम्नलिखित काम करता है की जरूरत नहीं है:

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

कारण:, केवल का उपयोग कर नमस्ते का इलाज होगा एक स्ट्रिंग (चार सरणी) के रूप में है एक शून्य करने के लिए इसे कास्टिंग द्वारा सूचक यह हो जाएगा हेक्स पता के रूप में दिखाया गया है।

2

या तो:

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

यह भी काम करता है:

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

रूप में अच्छी तरह यदि संभव हो तो कुछ स्पष्टीकरण जोड़ें। –

+1

यदि 'हैलो'' int' के लिए सही ढंग से गठबंधन नहीं किया गया है, तो यह अनिर्धारित व्यवहार का कारण बन सकता है। यह देखते हुए कि 'शून्य *' के साथ संस्करण का उपयोग करने का कोई कारण नहीं है। –

संबंधित मुद्दे