The & operator takes the address of the thing that follows it.
Given string s1:
&s1[0] --> take the address of s1[0], which is the first character in the string. Hence, the address is of the first character in the string.
&s1 --> take the address of s, which is a std::string object. Hence, the address is of an object that manages a character string.
Given some_type s[] = { ...:
&s[0] --> take the address of s[0], which is the first element in the array (in your case it is a std::string, but it could be an integer or a double or a struct or anything).
s --> this is the same* as &s[0].
&s --> take the address of s, which is itself the address of the first element in the array. Hence, it is the address of an address.