【问题标题】:How can you get a constant pointer to the first char in a character array?如何获得指向字符数组中第一个字符的常量指针?
【发布时间】:2017-05-26 01:04:23
【问题描述】:

在以下程序中,使用cin 更改存储的字符串,从而更改地址。 字符串的第一个元素的地址由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
}

【问题讨论】:

  • 地址到底发生了什么变化?
  • 不合理。存储在数组中的字符串正在发生变化。这与其地址无关。
  • 你真的应该阅读a good book on C++

标签: c++ string pointers c++14


【解决方案1】:

地址没有变化,存储在该地址的数据正在变化。打印整个字符串的原因是因为您将 指针 传递给cout,并且可以通过提供指向第一项的指针将数组传递给函数(或流)。传递一个指向第一个字符的指针就像传递一个 C 风格的字符串。如果要打印第一个字符的地址,则需要将指针转换为void*cout&lt;&lt;(void*)&amp;s[0](这将打印第一个字符的地址)。

【讨论】:

  • @Quentin 我修好了,现在好些了吗?
  • @Quentin 我也会解决这个问题,谢谢! (认真地)编辑:更好吗?
猜你喜欢
  • 1970-01-01
  • 2011-04-01
  • 2017-07-19
  • 2013-08-02
  • 2015-06-22
  • 1970-01-01
  • 2020-03-25
  • 2011-06-17
  • 2021-06-28
相关资源
最近更新 更多