c++ - 如何获得指向字符数组中第一个字符的常量指针?

标签 c++ string pointers c++14

在下面的程序中,使用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/

相关文章:

c++ - 基于四元数的第一人称视角相机

ruby - 无效的十六进制转义

c - 输出中只显示第一个字母。[字符类型]

c++ - 在具有自动存储持续时间的对象上使用智能指针

java - 安卓 native Activity 。如何在其他线程中做一些工作?

c++ - C++的随机类

javascript - 如何在javascript中将html表格转换为字符串

c++ - 网络上对变量、指针、引用和内存地址的最佳解释在哪里?

c++ - 如何指向输入流?

c++ - 将链表嵌入数据结构有什么好处?