为什么
#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它应该查看的不是内存的字符串。