Vac*_*ant 1 c++ pointers cout char ostream
我对 C++ 比较陌生,在使用指向 char 数组(C 样式字符串)的指针时,我对其与 ostream 对象的行为感到困惑。
const char* items {"sox"};
cout << items << endl;
cout << items[0] << endl;
cout << *items << endl;
cout << &items << endl;
cout << &items[1] << endl;
Run Code Online (Sandbox Code Playgroud)
运行这会导致:
sox
s
s
0x7fff2e832870
ox
Run Code Online (Sandbox Code Playgroud)
与其他数据类型的指针相反,打印变量不输出地址,而是作为一个整体输出字符串。据我了解,这是由于<<运算符为char 数组重载以将它们视为字符串。
我不明白的是,cout << &items[1]从索引 1 开始打印字符串 ( ox),而不是索引 1处的地址char。这也是由于<<运算符重载还是这种行为的原因是什么?
的类型&items[1]是const char *。因此使用了const char *重载,operator <<从索引 1 开始打印字符串。
OTOH,&itemsis的类型const char **,不存在特定的重载,因此items打印了 的地址(通过const void *重载)。