3 回答

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

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
cout如果收到一個(gè)字符串,則打印一個(gè)字符串,就這么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);
因此您需要轉(zhuǎn)換為const void*。

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
我只是將其轉(zhuǎn)換為void *,因此它不會(huì)嘗試將其解釋為C字符串:
cout << (void*) cptr << endl;
但是,一個(gè)更安全的選擇是使用dirkgently的答案中的static_cast(這樣,至少在編譯時(shí)檢查了強(qiáng)制類型轉(zhuǎn)換)。
- 3 回答
- 0 關(guān)注
- 640 瀏覽
添加回答
舉報(bào)