十六进制数系统中的POINTER值

时间:2015-11-30 14:59:47

标签: c++

我正在Codeblocks环境中学习C ++。

即使应用了

,我也没有将指针值作为十进制数(变量是指向整数的指针)
>>cout.setf(ios::dec);

它显示为十六进制,但我希望它是十进制数。我该怎么办? (我使用c ++来傻瓜学习)

1 个答案:

答案 0 :(得分:3)

ios::dec仅适用于整数类型。指针不是整数,即使它已转换为一个用于打印。转换后,指针始终以十六进制基数打印。

如果要在十进制基数中打印指针表示的值,必须先将其转换为整数并将整数传递给流。您可以使用reinterpret_cast进行转换。

“我应该将指针转换为哪种整数类型?”你可能会问。好吧,uintptr_t是一个无符号整数类型,保证大到足以表示没有溢出的指针。使用它。

对您的尝试的评论:

int a=5;
int b = *reinterpret_cast<int*>(&a);
        ^                 ^
        dereference       a pointer type

我建议你做的是将指针强制转换为整数类型。你试图做的是将它转换为指针类型。 int*是指向int的指针。 &a的类型已为int*。将int*投射到int*毫无意义。以下是如何将指针转换为整数:

reinterpret_cast<std::uintptr_t>(&a);

您尝试的另一个问题是您取消引用指针。当你想获得指向值时,你应该怎么做。指向的值显然是5。但是如果你想要值的地址,即指针的值,那么你不要取消引用指针。