Here is my test code:
Code:
std::cout << &str << '\t' << (void *)&str[0] << '\t' << (void *)&str[1] << '\t' << (void *)&str[2] << '\t' << (void *)&str[3] << std::endl;
And here is the result:
Capture.PNG

Why &str and &str[0] is not the same address? What is the sceret inside this?