Devi solmente indicare alla cout che quello che vuoi visualizzare e' il valore numerico dell'indirizzo e non la stringa a partire da quell'indirizzo ...

cout << "The address of string[1] is " << (int)&string[1] << endl;
cout << "The address of string[2] is " << (int)&string[2] << endl;
cout << "The address of string[8] is " << (int)&string[8] << endl;

E come mai la scrittura *string[0] non ha senso?
Perche' string[0] non e' un indirizzo valido ma un carattere ...