std :: string的每个字符的地址

时间:2011-09-16 06:01:57

标签: c++ arrays string memory-address

我尝试打印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

2 个答案:

答案 0 :(得分:13)

std::ostream尝试打印char*时,它会假定它是C风格的字符串。

在打印前将其投放到void*,您将得到您期望的结果:

cout << (void*) &str[i] << endl;

答案 1 :(得分:1)

或者您可以使用旧的printf

printf("\n%x",&s[i]);