为什么C数组初始化语法不允许任意赋值?

ani*_*rak 6 c arrays

我试图学习Java中的数组基础知识,这个问题出现了:

版本1:

int[] x  = {12,34,56,78};
Run Code Online (Sandbox Code Playgroud)

版本2:

int[] x;  
x = {12,34,56,78};
Run Code Online (Sandbox Code Playgroud)

版本1是正确的,但版本2不正确.

为什么会这样?它背后的故事是什么?
请从面向编译器的角度描述这一点.

Dan*_*Dan 2

在后一种情况下,编译器需要处理的第一行只是int x[];. 编译器不知道数组的长度,除非您给它一个长度int x[4];或给它初始值,允许它确定长度。