2012-02-21 38 views
15

tôi có mã này:Hiển thị địa chỉ của một chuỗi

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

Và đây là kết quả:

Pointer value = Hello World 
Pointer address = 0012FF74 

Khi tôi gỡ lỗi để chương trình của tôi sử dụng OllyDbg, tôi thấy rằng giá trị của 0x0012FF74 là ví dụ 0x00412374.

Có cách nào tôi có thể in địa chỉ thực tế mà hello trỏ tới không?

Trả lời

23

Nếu bạn sử dụng &hello, nó sẽ in địa chỉ của con trỏ chứ không phải địa chỉ của chuỗi. Chuyển con trỏ đến số void* để sử dụng quá tải chính xác của operator<<.

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

Tôi không có một trình biên dịch nhưng có lẽ các công việc sau:

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

Lý do: chỉ sử dụng chào sẽ đối xử như một chuỗi (mảng char), bằng cách đúc nó vào một khoảng trống con trỏ nó sẽ được được hiển thị dưới dạng địa chỉ hex.

2

hoặc lâu hơn:

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

này cũng hoạt động:

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

xin thêm một số lời giải thích cũng như nếu có thể. –

+1

Điều này có thể gây ra hành vi không xác định nếu 'hello' không được căn chỉnh chính xác cho' int'. Cho rằng phiên bản có 'void *' hoạt động không có lý do gì để sử dụng nó. –

Các vấn đề liên quan