c++ - 十六进制数字系统中的 POINTER 值

标签 c++

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

即使在应用

>>cout.setf(ios::dec);

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

最佳答案

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);

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

关于c++ - 十六进制数字系统中的 POINTER 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001527/

相关文章:

c++ - 为什么我的 vector 不能访问嵌套结构中的变量?

c++ - 如何修复我的 Qt 窗口的大小?

c++ - 在单链表上实现模板的问题

c++ - echo(shell)与C语言

c++ - 即时返回函数调用会编译为 "nop"指令吗?

c++ - 在 mousePressEvent() 中更改 QWidget 父级不起作用

c++ - 如何设置模板参数,灵活选择不同种类的函数

c++ - 射线平面相交 : inaccurate results - rounding errors?

c++ - 有没有办法在类上禁用构造函数合成?

c++ - Blackberry 10 Cascades 中的布局有问题,qml(C++ 和 QT)