我尝试打印std::string
的每个字符的地址。但是我不知道std::string
内部发生了什么导致了这个输出,而对于数组,它正在按照我的预期给出地址。有人可以解释一下发生了什么吗?
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "Hello";
int a[] = {1,2,3,4,5};
for( int i=0; i<str.length(); ++i )
cout << &str[i] << endl;
cout << "**************" << endl;
for( int i=0; i<5; ++i )
cout << &a[i] << endl;
return 0;
}
输出:
Hello
ello
llo
lo
o
**************
0x7fff5fbff950
0x7fff5fbff954
0x7fff5fbff958
0x7fff5fbff95c
0x7fff5fbff960
答案 0 :(得分:13)
当std::ostream
尝试打印char*
时,它会假定它是C风格的字符串。
在打印前将其投放到void*
,您将得到您期望的结果:
cout << (void*) &str[i] << endl;
答案 1 :(得分:1)
或者您可以使用旧的printf
printf("\n%x",&s[i]);