2014-10-31 73 views
0
// example: class constructor 
#include <iostream> 
#include <string> 

class Test{ 
public: 
    char* getColor(){ 
     return color; 
    } 
private: 
    char color[5] = "Blau"; 
}; 

int main() { 
    Test s; 
    char *myChar = s.getColor(); 
    std::cout << myChar; 
    return 0; 
}; 

我真的不明白這實際上是如何返回「Blau」而不是隻是B或其他東西。分配字符數組到單個字符的奇怪行爲

我在做什麼是分配開始指針,如果一個字符數組到單個字符指針。

我真的很想理解爲什麼會發生這種情況。也許這是因爲std :: cout獲取該類型的所有值?因此,而不是「B」它說:「布勞」

+0

'myChar'不是一個字符,它是一個字符指針。 – 2014-10-31 16:00:13

回答

1

指向單個對象的指針與指向數組第一個元素的指針沒有區別。程序員應該知道它應該如何解釋;或者使用std::string等更友好的類型。

當您將char*<<流式傳輸時,它假定它是指向零終止的C風格字符串的第一個元素的指針,並打印它從其中找到的所有字符,直到找到零值。

+0

我將如何去分配一個char []我從一個函數獲得另一個char []具有相同的大小?這甚至可能嗎? – Code0 2014-10-31 16:05:46

+0

@ Code0:不是直接。你可以拷貝,但是你必須手動執行,例如用'std :: copy''std :: memcpy''std :: strcpy'等庫函數...... C和C++數組是相當次要的。 – Deduplicator 2014-10-31 16:06:38

+0

@ Code0:數組不可分配;它們相當古怪,可以追溯到史前時代。如果你想要一個容易複製和比較的友好的字符串類型,可以使用'std :: string'。 – 2014-10-31 16:07:16

1

myChar不是單一char但有指針這樣的(你總是可以做指針算術/索引,而不是直解引用)。

operator<<有一個ostream& + char*的過載,將其輸出爲0終止字符串的指針。

所以,沒有任何意外。

0

C++中的數組是指向數據塊第一個元素的常量指針。因此你的顏色變量是指針。