string a = "asdf";
cout<<&a[0];
cout<<a[0];
为什么这两个输出不同?为什么 &a[0]
不是地址而是整个字符串?
最佳答案
&a[0]
类型为 char *
.流运算符 <<
故意为 const char *
重载输出从该地址开始的以零结尾的字符串(C 风格字符串)的参数。例如。如果你这样做
const char *p = "Hello World!";
cout << p;
它是 <<
的重载版本这确保了 "Hello World!"
字符串本身被发送到输出,而不是指针值。
这正是让您的代码也输出整个字符串的原因。自 C++11 std::string
对象需要将其数据存储为零终止字符串和 &a[0]
只不过是指向存储在 a
中的字符串开头的指针对象。
关于c++ - 字符串中的 a[0] 和 &a[0] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160601/