以下代码:
int number = 65;
char *ptr = reinterpret_cast< char* >(&number);
cout << *ptr << endl;
*ptr
打印 A
和 ptr
打印 A
。为什么它们都打印相同的结果?
最佳答案
流正在重载 <<
这样取消引用是隐式地为 char
完成的无论如何。
更具体地说:自 char *
是string
C, ostream
尝试这样读取它,即它取消引用指针并读取 char
s 直到它找到一个零字节。 (这仅适用于正确的 Endianness 。)
考虑这段代码:
#include <iostream>
int main(void) {
char c = 'A';
int i = 66;
std::cout << c << '\n';
std::cout << &c << '\n';
std::cout << i << '\n';
std::cout << &i << '\n';
return 0;
}
在我的机器上(不是全部!)它打印
A
AB
66
0x7fff0d1db1bc
因为c
打印正确,但是 &c
被解释为字符串。但是c
不是空终止的所以ostream
继续阅读,找到 i
的第一个字节最后是一个空字节,因为 i
的值太小了,我们只使用它的四个字节之一。
然而,i
和 &i
按预期打印。此行为仅针对 char
实现因为它对其他类型没有意义。
关于c++ - 为什么我在取消引用指针和不取消引用指针的情况下得到相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34691721/