In C/C++, Char[] is basically an array of characters. So, if we have something like below :- char c[] = "hello" ; It means, we have an array "c" which has been initialized to string "hello". It is equivalent to following char c[] = { 'h' , 'e' , 'l' , 'l' , 'o' , '\0' }; It essentially means, that "c" is an array of length 6 (based on the length of string literal). In memory, array is stored in continous memory cells which can be accessed by name "c". A copy of this array is present in stack and just like any other arrays, you can modify its contents, i.e. c[0] = 'H' ; // Perfectly legal Note, that you can not assign a new string literal to "c" without re-declaring it but can change the individual character by array index. Char* is a pointer to string literal. In this case "c" is a "pointer to char" and initializes it to