Other type pointers can do this, and also just fine. A string literal is an array of characters, so you don't need to use an address operator to assign to a pointer.
If you have an integer array, either int * or int [], you can assign it to an int pointer without using the address operator:
int intArray1[] = {0, 1, 2}; // fist array int * intArray2 = new int[10]; // second array // can assign without & operator int * p1 = intArray1; int * p2 = intArray2;
char * simply determined that the literal type of a string is actually const char * , and it is still allowed to assign it (with a warning about failover).
source share