Технически, поскольку стандарт явно разрешает инициализировать массивы (любого) символьного типа строковыми литералами ( 6.7.9p14 ):
Массив символьного типа может быть инициализирован символьной строкой
литерал или строковый литерал UTF-8, необязательно заключенный в фигурные скобки.
Последовательные байты строкового литерала (включая завершающий ноль)
символ, если есть место или если массив имеет неизвестный размер)
инициализировать элементы массива.
, в то время как для большинства преобразований указателей стандарт требует явного приведения ( 6.5.4p3 ):
Преобразования, в которых используются указатели, за исключением случаев, разрешенных
ограничения 6.5.16.1 , должны быть определены посредством явного
отбрасывать.
Интуитивно, потому что вы можете сделать:
unsigned char a0 = 'f', a1 = 'o', a2 = 'o';
или другими словами, потому что вы можете инициализировать целочисленный тип с другим целочисленным типом без явного приведения.