7

为什么

#include <iostream>
using namespace std;

int main() {
  cout << (char*)0x10 << endl; 
}

段错误,但是

#include <iostream>
using namespace std;

int main() {
  cout << (void*)0x10 << endl; 
}

似乎工作得很好?

4

3 回答 3

9

因为

cout::operator <<(void*) 

打印内存地址,并且

cout::operator <<(char*)

打印一个以 null 结尾的字符数组,当您尝试char0x10.

于 2012-07-31T22:08:37.943 回答
4

ostream::operator<<重载,有一个版本char*将给定的指针解释为以空字符结尾的字符串。

于 2012-07-31T22:09:35.893 回答
3

<<with有一个特殊的重载char*,因此可以轻松输出 C 风格的字符串。

因此

cout << (char*)0x10 << endl; 

试图打印出(char*)0x10它应该查看的不是内存的字符串。

于 2012-07-31T22:09:00.117 回答