将 char 数组分配给单个 char 的奇怪行为
strange behaviour of assigning char array to single char
// 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++ 中的数组是指向数据块第一个元素的常量指针。因此,颜色变量是指针。