This is down to the fact that "<<" will automatically follow the pointer and print out the string instead of just printing out the memory address. This is easier to see in printf as you can specify the print out of a pointer OR what the pointer references.
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char** argv)
{
char string1[] = "lololololol";
char* string2;
string2 = string1;
printf("%s",string2);
printf("%p",string2);
return EXIT_SUCCESS;
}
You can see here that %s prints out the string and %p prints out the memory address.