关于数组的问题(C语言)

假定一个数组arr【】={0};然后手动输入一个数x=5,
for(i=0;i<x;i++)
scanf("%d,&arr[i]);//手动输入五个数
为什么arr【】的方括号里不写数字,当打印arr【0】时会出现程序卡死,但是如果方括号里有数字就会正常的情况呢?

定义数组时要同时定义数组长度,有两种形式:
(1)只写数组长度,如:int arr[10]。定义一个数组长度为10的数组
(2)不写数组长度,但初始化数组元素,如:int arr[]={1,2,3,4}。那么这个数组的长度就为数组元素个数4。
arr[]={0}表示只有一个数组元素,即数组长度为1,你输入5个数,已经超过数组长度了,会出现数组越界情况。

定义数组arr[]={0}; 这句的意思是:定义数组 arr[] ,并同时数组元素初始化为 0,由于arr[]的方括号里未写数字,初始化元素的个数即是数组的长度,所以这里arr[]数组只有一个元素,即等价于 a[0] = 0; 当对数组手动输入五个数时,即会对数组的越界操作,会出现后面的不正常现象。
假如:int arr[] = {0,0}; 这时数组 arr[] 的长度为2,arr[0] = 0, arr[1] = 0。

建议你看一下这篇文章,看完就明白了http://c.biancheng.net/view/184.html