Инициализация массива C во время, отличное от объявления?

Я знаю в Си, что могу сделать следующее.

int test[5] = {1, 2, 3, 4, 5};

Теперь это допустимо только при объявлении массива. Однако мне было интересно, почему это не разрешено делать позже? Но потом в программе не разрешается делать следующее.

test[5] = {10, 20, 30, 40, 50}; 

Или что-то подобное. Почему это? Я знаю, что это не законно, и я не жалуюсь, но кто-то может дать мне более техническое объяснение, почему я не могу этого сделать? (то есть не просто говорите, что спецификация C не позволяет этого или что-то в этом роде)

Я предполагаю, что это должно что-то делать со временем, когда память выделяется в стеке для массива, поэтому в этот момент C может автоматически заполнять мои значения, но тогда почему он не может сделать это позже?

Спасибо, парни