Это не просто массивы, вы не можете предоставить инициализатор для чего-либо в любой точке, кроме определения.Люди иногда называют второе утверждение чего-то вроде int i; i = 0;
«инициализацией i
».Фактически это присваивание i
, которое ранее содержало неопределенное значение, потому что оно не было инициализировано.Очень редко бывает сложно назвать это «инициализацией», но в том, что касается языка, там нет инициализатора.
Назначение и инициализация - это разные вещи для языка, хотя они оба используют символ =
,Массивы не могут быть назначены.
Причина, по которой массивы не могут быть назначены, описана в другом месте, например Почему C ++ поддерживает членское присвоение массивов внутри структур, но не в целом? .Краткий ответ: «исторические причины».Я не думаю, что есть какая-то ужасная техническая причина, по которой язык нельзя было изменить, чтобы разрешить присвоение массива.
Существует вторичная проблема, которая грамматически {1, 2, 3, 4, 5}
является инициализатором, а не литералом массива, и, следовательно, можетне будет использоваться в назначении, даже если массивы были назначаемыми.Я не совсем уверен, почему у C89 нет литералов массива, вероятно, просто никто не удосужился потребовать их.C99 вводит синтаксис «составных литералов» вообще и литералов массива в частности: (int[]) {1, 2, 3, 4, 5}
.Вы все еще не можете присвоить массив из него.