2013-11-09 118 views
1

首先,對不起我的英語不好。 我想問一些我期望驚人的東西。我不知道這是驚人的每個人,但是這對我來說:) 我舉的例子代碼指針與陣列指向陣列問題

char Text[9] = "Sandrine"; 
for(char *Ptr = Text; *Ptr != '\0'; ++Ptr) 
cout << Ptr << endl; 

此代碼打印

Sandrine 
andrine 
ndrine 
drine 
rine 
ine 
ne 
e 

我知道這是一個在C複雜的問題++。爲什麼?如果我打電話給Ptr打印出屏幕,它將打印所有的數組。但是,如果Text數組是動態數組,則Ptr僅打印動態數組(Text)的第一種情況。爲什麼發生?請解釋C++數組,它如何適用於指向數組的組合。

感謝您的幫助。

+0

因爲'const char *'有一個特殊的輸出處理程序。 – chris

+0

你能指定你的意思是什麼樣的動態數組嗎? – KillianDS

+0

@KillianDS例如char * myarray = new char(「play」); – burakim

回答

3

這裏沒有什麼特別的關於數組的東西。相反,特殊行爲是針對char const*:在C中,指向具有終止空字符的字符序列的指針用於表示字符串。 C++以字符串文字的形式繼承了這個字符串的概念。爲了支持這些字符串的輸出,char const*的輸出操作符將指向char的指針解釋爲實際上指向字符串開頭的指針,並將該序列打印到第一個空字符。

0

當你寫

char Text[9] = "Sandrine"; 

「文本」是內存中的地址,這是你的字符串,並在其第一位置的起始地址有一個「S」之後的其餘字符。 C中的一個字符串以\ 0,即分隔「S andrine \ 0」

當你寫

for(char *Ptr = Text; *Ptr != '\0'; ++Ptr) 
    cout << Ptr << endl; 

時,因爲ptr指向開始for循環第一次運行時它打印整個字符串字符串char* Ptr = Text當你增加Ptr 你指向下一個字符文本+ 1即'a'等等,一旦Ptr發現\0 for循環退出。