c++ - 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;
}
解决方案
你不能让它安全地工作,这不是一个安全的假设。无法保证堆栈在您的进程中的位置,在进入 main 之前堆栈上有多少等,实际上堆栈上的数量可能是用于特定命令行的函数启动您的程序。
也就是说,出于学术目的,您正在寻找制定不安全假设的语法是:
std::cout << *reinterpret_cast<const std::string *>(0x6ffdf0);
根据经验,如果您看到reinterpret_cast
;总是会产生怀疑。它的意思是“把这个位模式当作这种类型,结果该死的”。
推荐阅读
- angular - Angular changeDetector.detectChanges() 在 *ngFor 中破坏 matTooltip
- graphql - 概念性问题:多个端点的共享 GraphQL 架构(客户端/管理员)
- python - 如何将 Tor 请求发送到带有 stem 的网站?
- grafana - Cloudwatch 指标中的元数据(替代维度?)
- ubuntu - Nuxt 与 Apache2 返回 502 代理错误:从远程服务器读取错误
- vector - 比较两个二维特征向量,找出它们的相似度
- c++ - 命名空间的类的朋友,未在命名空间中声明和定义
- clang - LLVM IR 代码中是否需要对齐指令?
- php - 将 CSV 导入 SQL 表适用于 XAMPP,但不适用于在线服务器
- c++ - 初始化 std::unordered_map 类型的 std::shared_ptr 时编译错误