Учитывая, что это разрешено:
char c[] = "abc";
char c[] = {'a','b','c','\0'}
char *c = "abc";
Почему же это запрещено?
char *c = {'a','b','c','\0'}; // error: a char cannot initialize a char*
Если строковый литерал интерпретируется компилятором как завершенный нулем массив символов, то я бы подумал, что это эквивалентно приведенному выше утверждению 3, не так ли?
Аналогично, почему это не разрешено:
int arr[3];
int *i = arr; // OK
int *i = {1,2,3} // error: an int cannot initialize an int*
Это не огромная проблема, мне просто любопытно ... Думаю, вопрос сводится к тому, в чем разница между строковым литералом (или объявленным целочисленным массивом) и массивом символьных элементов при назначении указателя?