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

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

為什么cout打印char數組與其他數組不同?

為什么cout打印char數組與其他數組不同?

C++
慕尼黑8549860 2019-09-26 10:43:01
我正在使用C ++來了解指針的工作原理。我有一段使用數組的代碼,我只是用來了解等效項如何與指針一起工作。int main() {         int arr[10] = {1,2,3};         char arr2[10] = {'c','i','a','o','\0'};     cout << arr << endl;     cout << arr2 << endl;}但是,當我運行此命令時,arr輸出int數組的第一個元素的地址(如預期的那樣),但arr2不輸出chars數組的第一個元素的地址;它實際上會打印“ ciao”。我想念的還是尚未了解的是什么?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

for const void*和for的重載是operator << const char*。您的char數組將轉換為const char*并傳遞給該重載,因為它比to更適合const void*。但是,將int數組轉換const void*為該版本并傳遞給該版本。運算符<<的版本const void*僅輸出地址。const char*實際接受版本的版本將其視為C字符串,并輸出每個字符,直到終止的空字符為止。如果不希望這樣,則在將char數組const void*傳遞給operator <<時將其顯式轉換為:

cout << static_cast<const void*>(arr2) << endl;


查看完整回答
反對 回復 2019-09-26
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

因為cout的operator <<重載用于char*輸出字符串,并arr2與之匹配。

如果需要地址,請嘗試將字符數組轉換為空指針。


查看完整回答
反對 回復 2019-09-26
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

雖然強制轉換可能是一種更有意義的方法,但是您也可以使用addressof運算符:

cout << &arr2 << endl;


查看完整回答
反對 回復 2019-09-26
  • 3 回答
  • 0 關注
  • 1005 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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