我可以在C++中将指针地址(即十六进制整数)转换为十进制和八进制基数int

ans*_*bhi 4 c++ pointers

#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)地址(&ba),这是一个十六进制整数dec,并oct利用价值<iostream>流操纵.但上运行,输出同样为所有的人(的hex,dec,oct)..也没有,有任何编译错误.所以你能详细说明一下这个原因吗?此外,noshowbase似乎没有对输出产生任何影响.在地址之前无论如何输出0x ..

Sne*_*tel 5

地址不是十六进制整数.这是一个地址.

实际上,地址实现为整数,指的是内存位置,并且可以重新解释为整数.这很少是有用的事情(特别是如果你是无错误代码的粉丝),但它不时出现.你可以reinterpret_cast<uintptr_t>(a)用来做那件事.(请注意,转换为int通常不会正常工作.请记住我所说的无错代码.)当您打印结果整数时,它将打印为十进制,八进制或十六进制整数,具体取决于当前 -设定基数.