为什么打印c样式字符串的'索引n的地址导致子字符串的输出

问题描述 投票:0回答:1

我对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;

运行此操作将导致:

sox
s
s
0x7fff2e832870
ox

与其他数据类型的指针相反,打印变量不会输出地址,但会输出整个字符串。据我了解,这是由于<<运算符被char arrays >>重载以将它们视为字符串。

我不理解的是,cout << &items[1]从索引1开始打印字符串(ox,而不是从索引1到char的地址。这是否也是由于<<运算符是超载或这种行为的原因是什么?

我对C ++相当陌生,在使用指向char数组(C样式字符串)的指针时,我对它与ostream对象的行为感到困惑。 const char *项目{“ sox”}; cout <

c++ pointers char cout ostream
1个回答
2
投票

&items[1]的类型是char *。因此,将使用const char *operator <<重载,从索引1开始打印字符串。

[OTOH,&items的类型为std::string *,对此没有特定的重载,因此将打印字符串变量本身的地址。

© www.soinside.com 2019 - 2024. All rights reserved.