【问题标题】:& printing out the rest of a string instead of the address [duplicate]& 打印出字符串的其余部分而不是地址 [重复]
【发布时间】:2018-05-02 13:18:16
【问题描述】:

请记住,我对指针的了解非常少,因为我刚开始学习它们。

当我在 C++ 中乱搞时,我写了一小段代码,认为它只会打印出字符串中每个字符的地址

#include <iostream>

using namespace std;

string a = "Hello, World!";

int main() {
    for(int i=0; i<a.length();i++) {
        cout << &a[i] << endl;
    }
    return 0;
}

然而,当我编译并运行它时,它导致它打印出来,好像字符串向左移动一样。

为什么当它使用 & 时,我认为它会检索地址,而不是获取字符串的其余部分,这是没有意义的。

【问题讨论】:

  • &amp;a[i] 是一个指向字符的指针。有一个特定的重载来处理它,即打印一个以空字符结尾的字符串。如果你想要地址,你需要将指针转换为 (void*)。
  • 转换为 void * 以避免

标签: c++ pointers


【解决方案1】:

正如评论中所说,&amp;a[i] 是指向char 的指针,&lt;&lt; 运算符将从该字符开始打印以空字符结尾的字符串,而不是其地址。所以如果你想打印地址,你必须将它转换为void *,如下:

#include <iostream>
using namespace std;

string a = "Hello, World!";

int main() {
    for(int i=0; i<a.length();i++) {
        cout << (void *)&a[i] << endl; //cast to (void *) to get the address
    }
    return 0;
}

【讨论】:

  • @user463035818,是的,你是对的。感谢您帮助我使这个答案更准确
  • 对我很好,点赞
【解决方案2】:

string 下标 ([]) 运算符返回 char。所以&amp; 操作返回一个指向char 的指针。 cout operator&lt;&lt; 有一个重载,它认为它应该将参数打印为 c 字符串。您应该将其转换为void*,这样cout 就不会认为它是一个字符串。

(void*)&a[i]

【讨论】:

  • @FrançoisAndrieux 现在好点了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多