#include <iostream>
using namespace std;
int main()
{
int *a = nullptr;
int b;
a = &b;
cout << noshowbase;
cin >> b;
cout << dec << a << '\t' << oct << a << '\t' << hex << a;
}
Run Code Online (Sandbox Code Playgroud)
考虑这个代码.它是设计来转换一个变量(在这里b)地址(&b或a),这是一个十六进制整数dec,并oct利用价值<iostream>流操纵.但上运行,输出同样为所有的人(的hex,dec,oct)..也没有,有任何编译错误.所以你能详细说明一下这个原因吗?此外,noshowbase似乎没有对输出产生任何影响.在地址之前无论如何输出0x ..
地址不是十六进制整数.这是一个地址.
实际上,地址实现为整数,指的是内存位置,并且可以重新解释为整数.这很少是有用的事情(特别是如果你是无错误代码的粉丝),但它不时出现.你可以reinterpret_cast<uintptr_t>(a)用来做那件事.(请注意,转换为int通常不会正常工作.请记住我所说的无错代码.)当您打印结果整数时,它将打印为十进制,八进制或十六进制整数,具体取决于当前 -设定基数.