首页 > 解决方案 > C ++:取消引用十六进制值,一种语法问题

问题描述

我怎样才能使第三个 cout 工作?我想了解一些确切的内存地址(我大胆假设每次执行程序时它都会保持不变),在本例中为 0x6ffdf0。

#include <iostream>
#include <string>
using namespace std;



int main(){
    string colors = "blue";
    string* pointer = &colors;

    cout << pointer << endl;  //outputs 0x6ffdf0

    cout << *pointer << endl; //outputs "blue"

    cout << *0x6ffdf0;        //I want this to also output "blue"


    return 0;
}

标签: c++

解决方案


你不能让它安全地工作,这不是一个安全的假设。无法保证堆栈在您的进程中的位置,在进入 main 之前堆栈上有多少等,实际上堆栈上的数量可能是用于特定命令行的函数启动您的程序。

也就是说,出于学术目的,您正在寻找制定不安全假设的语法是:

std::cout << *reinterpret_cast<const std::string *>(0x6ffdf0);

根据经验,如果您看到reinterpret_cast;总是会产生怀疑。它的意思是“把这个位模式当作这种类型,结果该死的”。


推荐阅读