2012-07-31 95 views
4

指針爲什麼印刷與<iostream>

#include <iostream> 
using namespace std; 

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

段錯誤,但

#include <iostream> 
using namespace std; 

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

似乎只是正常工作?

回答

6

因爲

cout::operator <<(void*) 

打印內存地址,並

cout::operator <<(char*) 

打印一個空終止字符數組,你遇到不確定的行爲,當您嘗試從0x10閱讀char陣列。

+0

明白了。謝謝! – abeln 2012-07-31 22:09:48

+0

@abeln肯定!... – 2012-07-31 22:10:35

2

有用於<<char*特殊的超載,讓C風格的字符串可以輸出容易。

因此

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

試圖打印出位於(char*)0x10字符串是不是內存它應該來看看。