我对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 <
&items[1]
的类型是char *
。因此,将使用const char *
的operator <<
重载,从索引1开始打印字符串。
[OTOH,&items
的类型为std::string *
,对此没有特定的重载,因此将打印字符串变量本身的地址。