For convenience, the language allows char * (or, preferably, const char *) to be initialized with a string. This is because it is a very common usage, and it has been possible since C. You shouldn't really modify the string value (of course, that's a separate debate).
With an int, if you initialize an int a[5], it is expected you might change the values. The initialized values will be copied into your array (compiler optimizations not withstanding), and you can change them how you see fit. If int *a was allowed to initialize this way, what would it be pointing to? It isn't really clear, so the standard doesn't allow it.