Назначение элементов массива при инициализации массива [duplicate]
На этот вопрос уже есть ответ:
Путаница по поводу инициализации массива в C 7 ответовРассмотрите следующую простую программу:
#include <stdio.h>
int main(void)
{
int a[5] = { a[2] = 1 };
printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
}
С GCC 7.3.0 это выводит
1 0 1 0 0
Учитывая, чтоa[1]
ноль, похоже, что инициализация похожа на
int a[5] = { 1 };
a[2] = 1;
Вопрос: хотя инициализаторы могут быть любыми общими выражениями, в каком порядке выполняются инициализация и присваивания?
Это даже верно и четко определено? Может ли это быть определено реализацией, не определено или может быть не указано?
Этот вопрос связан с вопросом Путаница об инициализации массива в C.