将char数组赋值给单个char的奇怪行为

时间:2014-10-31 15:57:41

标签: c++ arrays pointers

// 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;
};

我真的不明白这实际上如何回归&#34; Blau&#34;而不只是B或其他东西。

我正在做的是将char数组分配给单个char指针的起始指针。

我真的很想明白为什么会这样。也许是因为std :: cout获得该类型的所有值?所以不是&#34; B&#34;它说&#34;布劳&#34;

3 个答案:

答案 0 :(得分:1)

myChar不是单个char,而是指向此类的指针(并且您可以始终执行指针算术/索引而不是直接取消引用)。

并且operator<<ostream& + char*有一个重载,将其作为指向0终止字符串的指针输出。

所以,没有任何意外。

答案 1 :(得分:1)

指向单个对象的指针与指向数组第一个元素的指针之间没有区别。程序员应该知道如何解释它;或使用更友好的类型,如std::string

当您使用char*流式传输<<时,它会假定它是指向零终止C样式字符串的第一个元素的指针,并打印它找到的所有字符,从中开始一,直到找到一个零值。

答案 2 :(得分:0)

c ++中的数组是指向数据块第一个元素的const指针。因此,您的颜色变量是指针。