将 char 数组分配给单个 char 的奇怪行为

strange behaviour of assigning char array to single char

本文关键字:char 单个 数组 分配      更新时间:2023-10-16
// 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",而是"Blau">

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

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

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

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

所以,这并不奇怪。

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