在下面的程序中,使用cin
改变了存储的字符串,从而改变了地址。
string 的第一个元素的地址由s
表示。第一个元素的地址是字符串本身。因此,当输入新字符串时它会发生变化。当我尝试将 &s[0]
输出到 cout
时,它会给出整个字符串。
#include<iostream>
using namespace std;
int main() {
char s[6];
cin >> s; // say abcde
cout << s ;
cout << &s[0] ; // gives abcde
cin >> s; // say stack
cout << s;
cout << &s[0] ; gives stack
}
最佳答案
地址没有变,地址上存储的数据在变。打印整个字符串的原因是因为您将指针 传递给cout
。 , 并且可以通过给出指向第一项的指针将数组传递给函数(或流)。将指针传递给第一个字符就像传递 C 风格的字符串一样。如果要打印第一个字符的地址,则需要将指针转换为 void*
: cout<<(void*)&s[0]
(这将打印第一个字符的地址)。
关于c++ - 如何获得指向字符数组中第一个字符的常量指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587501/