亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

cout<with char*參數打印字符串,而不是指針值

cout<with char*參數打印字符串,而不是指針值

C++
米琪卡哇伊 2019-06-18 12:58:47
cout<with char*參數打印字符串,而不是指針值這是:const char * terry = "hello";cout<<terry;版畫hello而不是'h'..為什么會發生這種事?
查看完整描述

3 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

原因是std::cout會治療char *作為指向C樣式字符串的(第一個字符)的指針,并以此方式打印它。如果你想地址相反,您可以將其轉換為一個指針不是以這種方式對待,就像:

cout << (void *) terry;

(或使用const void *如果你擔心放棄恒常,這在這種情況下不是問題)。


如果你是一個純粹主義者而不是實用主義者,你也可以使用C+static_cast,大致如下:

cout << static_cast <const void *> (terry);

雖然在這種情況下沒有必要,但轉換為void *會很好的。下面的示例代碼顯示了所有這些選項的作用:

#include <iostream>int main (void) {
    const char *terry = "hello";
    std::cout << terry << '\n';
    std::cout << (void *) terry << '\n';
    std::cout << (const void *) terry << '\n';
    std::cout << static_cast<const void *> (terry) << '\n';
    return 0;}

輸出(地址在您的環境中可能有所不同):

hello0x80488700x80488700x8048870

注意,當使用static_cast,你應該確保你不會試圖拋棄static_cast <void *>(這就是const_cast是為了)。這是較新的C+強制轉換所做的檢查之一,而舊樣式的強制轉換沒有此限制。


查看完整回答
反對 回復 2019-06-18
?
MM們

TA貢獻1886條經驗 獲得超2個贊

您應該將代碼更改為:

cout << static_cast<const void*>(terry);

問題是<<運算符對指向C樣式字符串的指針重載,以打印字符串的內容.如果將其轉換為原始指針,則將具有打印指針的默認行為,即根據需要使用ioStreams打印指針。


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 585 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號