Адрес каждого символа std :: string - PullRequest
6 голосов
/ 16 сентября 2011

Я пытался напечатать адрес каждого символа 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 ]

14 голосов
/ 16 сентября 2011

Когда std::ostream пытается напечатать char*, он предполагает, что это строка в стиле C.

Перед печатью наберите void*, и вы получите то, что ожидаете:

cout << (void*) &str[i] << endl;
1 голос
/ 16 сентября 2011

или вы можете использовать старый printf

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