c++ - 字符串中的 a[0] 和 &a[0] 有什么区别

标签 c++ string

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/

相关文章:

javascript - 如何从 javascript 字符串末尾删除可变数量的字符

string - Python3 TypeError : list indices must be integers or slices, 不是 str

javascript - 等效于 ASP 的 .Contains 方法

c++ - 友元函数是否可以创建新对象? C++

c++ - 表达式是在C++中调用函数的结果

c++ - 在 makefile 中编写依赖项,使用 makefile

c++ - 我怎么能像 numpy 那样从 MxN 矩阵中减去 1xN 特征矩阵?

c - 如何将文本文件转换为字符串,但在 C 中包含 "\n"?

java - java中的字符串空构造函数

c++ - 是否可以从常规 main 调用 WinMain?