2017-04-08 319 views
1

爲什麼指針指向整數數組和字符數組時,行爲會有所不同?指針和數組[指針int和指向char的指針]

例如

int num[] = {1,2,3}; 
cout << num ; 

此打印出ADDRESS所述第一元件的

char list[] = { '1', '2', '3'}; 
cout << list ; 

此打印出陣列的整個元件的VALUE

同樣

cout << (num+1) ; 

打印出第二元件的地址。雖然

cout << (list+1); 

打印出整個陣列的值從所述第二元件

從我的理解開始,數組名是一個指針數組的第一個元素。沒有解引用運算符(*),指針應該返回元素的地址。但爲什麼char指針返回值?

+0

不同之處在於'operator <<'是一個重載函數,'char *'與其他指針類型有不同的重載 –

+0

C不是C++不是C.不要垃圾標籤! – Olaf

+0

我沒有意識到這個問題是專門針對C++的。我認爲這與整個指針和數組概念有關。對不起 – Aditya

回答

4

這不是指針的行爲不同:行爲是C++標準庫如何處理指針輸出。

具體來說,運算符<<有一個non-member overload for const char *,它處理以空字符結尾的C字符串。這是超載適用於打印char陣列。請注意,您的字符數組是而不是以空字符結尾,因此打印它會產生未定義的行爲。可以通過添加零到字符數組解決這個問題:

char list[] = { '1', '2', '3', '\0'}; 

還有an overload that takes void *,它適用於印刷int指針。

+0

您可以使用'0'而不是''\ 0'。 –