3 回答

TA貢獻1869條經驗 獲得超4個贊
重載分辨率選擇ostream& operator<<(ostream& o, const char *c);用于打印C樣式字符串的。您要ostream& operator<<(ostream& o, const void *p);選擇另一個。您可能最好在這里進行演員表:
cout << static_cast<void *>(cptr) << endl;

TA貢獻1887條經驗 獲得超5個贊
cout如果收到一個字符串,則打印一個字符串,就這么char *簡單。
下面是重載operator <<的ostream:
ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (const void* val);
ostream& operator<< (streambuf* sb);
ostream& operator<< (ostream& ( *pf )(ostream&));
ostream& operator<< (ios& ( *pf )(ios&));
ostream& operator<< (ios_base& ( *pf )(ios_base&));
ostream& operator<< (ostream& out, char c );
ostream& operator<< (ostream& out, signed char c );
ostream& operator<< (ostream& out, unsigned char c );
//this is called
ostream& operator<< (ostream& out, const char* s );
ostream& operator<< (ostream& out, const signed char* s );
ostream& operator<< (ostream& out, const unsigned char* s );
如果需要地址,則需要:
ostream& operator<< (const void* val);
因此您需要轉換為const void*。

TA貢獻1863條經驗 獲得超2個贊
我只是將其轉換為void *,因此它不會嘗試將其解釋為C字符串:
cout << (void*) cptr << endl;
但是,一個更安全的選擇是使用dirkgently的答案中的static_cast(這樣,至少在編譯時檢查了強制類型轉換)。
- 3 回答
- 0 關注
- 647 瀏覽
添加回答
舉報