I am a C++ newbie. Although many similar questions have been asked and answered, I still find these concepts confusing. I know
char c='a'            // declare a single char c and assign value 'a' to it
char * str = "Test";  // declare a char pointer and pointing content str, 
                      // thus the content can't be modified via point str
char str1[] = "Test"; // declare a char array str1 and assign "Test" to it
                      // thus str1 owns the data and can modify it
my first question is char * str  creates a pointer, how does char * str = "Test"; work? assign a string literal to a pointer? It doesn't make sense to me although it is perfectly legal, I think we can only assign an address to a pointer, however "Test" is a string literal not an address.
Second question is how come the following code prints out "Test" twice in a row?
char str2[] = {'T','e','s','t'};  // is this line legal? 
                                 // intializing a char array with initilizer list, seems to be okay to me
cout<<str2<<endl;               // prints out "TestTest"
why cout<<str2<<endl; prints out "TestTest"?
 
    