【问题标题】:Displaying the address of a string显示字符串的地址
【发布时间】:2012-02-21 12:12:04
【问题描述】:

我有这个代码:

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 指向的实际地址?

【问题讨论】:

    标签: c++ pointers


    【解决方案1】:

    如果您使用&amp;hello,它会打印指针的地址,而不是字符串的地址。将指针强制转换为 void* 以使用 operator&lt;&lt; 的正确重载。

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

    【讨论】:

    • @user1203803 ,为什么需要将其转换为 void* ?
    【解决方案2】:

    我没有编译器,但可能有以下工作:

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

    原因:仅使用 hello 会将 is 视为字符串(字符数组),通过将其转换为 void 指针,它将显示为十六进制地址。

    【讨论】:

      【解决方案3】:

      左右:

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

      【讨论】:

        【解决方案4】:

        这也有效:

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

        【讨论】:

        • 如果可能,请添加一些解释。
        • 如果hello 未正确对齐int,这可能会导致未定义的行为。鉴于带有void * 的版本可以正常工作,因此没有任何理由使用它。
        猜你喜欢
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        相关资源
        最近更新 更多