请记住,我对指针的了解非常少,因为我刚刚开始了解它们。
当我在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;时,我认为会检索地址,而不是得到字符串的其余部分,这是没有意义的。
答案 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