我正在 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/