An array contains the elements. A pointer points to them.
The first is a short form of saying
char amessage[16];
amessage[0] = 'n';
amessage[1] = 'o';
...
amessage[15] = '\0';
That is, it is an array that contains all the characters. The special initialization initializes it for you, and determines it size automatically. The array elements are modifiable - you may overwrite characters in it.
The second form is a pointer, that just points to the characters. It stores the characters not directly. Since the array is a string literal, you cannot take the pointer and write to where it points
char *pmessage = "now is the time";
*pmessage = 'p'; /* undefined behavior! */
This code would probably crash on your box. But it may do anything it likes, because its behavior is undefined.
answered 2009-08-26T16:11:07.163