Dirección de cada carácter de std :: string

Intenté imprimir la dirección de cada personaje destd::string. Pero no entiendo lo que está sucediendo internamente constd::string que está dando como resultado esta salida, mientras que para la matriz está dando la dirección como esperaba. ¿Podría alguien explicarme qué está pasando?

#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;
}

Salida

Hello
ello
llo
lo
o
**************
0x7fff5fbff950
0x7fff5fbff954
0x7fff5fbff958
0x7fff5fbff95c
0x7fff5fbff960

Respuestas a la pregunta(2)

Su respuesta a la pregunta