为什么
#include <iostream>
using namespace std;
int main() {
cout << (char*)0x10 << endl;
}
段错误,但是
#include <iostream>
using namespace std;
int main() {
cout << (void*)0x10 << endl;
}
似乎工作得很好?
因为
cout::operator <<(void*)
打印内存地址,并且
cout::operator <<(char*)
打印一个以 null 结尾的字符数组,当您尝试char
从0x10
.
被ostream::operator<<
重载,有一个版本char*
将给定的指针解释为以空字符结尾的字符串。
<<
with有一个特殊的重载char*
,因此可以轻松输出 C 风格的字符串。
因此
cout << (char*)0x10 << endl;
试图打印出(char*)0x10
它应该查看的不是内存的字符串。