我正在Codeblocks环境中学习C ++。
即使应用了
,我也没有将指针值作为十进制数(变量是指向整数的指针)>>cout.setf(ios::dec);
它显示为十六进制,但我希望它是十进制数。我该怎么办? (我使用c ++来傻瓜学习)
答案 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
。但是如果你想要值的地址,即指针的值,那么你不要取消引用指针。