&安培;打印出字符串的其余部分而不是地址

时间:2018-05-02 13:18:16

标签: c++ pointers

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

当我在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;
}

然而,当我编译并运行它时,它会导致打印,就像字符串向左移动一样。enter image description here

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

2 个答案:

答案 0 :(得分:3)

如评论中所述,&a[i]是指向char的指针,<<运算符将从此字符开始打印以空字符结尾的字符串,而不是其地址。因此,如果您要打印地址,则必须将其转换为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;
}

答案 1 :(得分:1)

venv/下标(string)运算符返回[]。因此char操作返回指向&的指针。并且char cout有一个重载,它认为应该将参数打印为c-string。您应该将其投放到operator<<,以便void*不会认为它是字符串。

cout