第1个回答 2007-10-30
首先 假如定义一个一维数组 int ary[];
缺少了一维数组的长度 系统无法按大小分配空间;
但假如int ary[] = {1,2};
就可以根据初始化的元素个数来把ary定义成相当于ary[2];
这应该能懂
再次
c语言中没有多维数组的概念 我们平常说的二维数组其实是“数组的数组” c语言对多维数组的定义也是定义成
"数组的数组的数组的..."
所以 当定义二维数组int a[][4] = {1,2,3,4,5,6,7,8};
其实是 “定义了两个以[4]为长度的数组”(这说法可能不准确)
所以在定义二维数组并初始化时 需要指明第二维的长度 好让编译器根据初始化元素的个数来确定数组的大小
文字表述欠缺专业 但 意思是这样 希望能明白
呵呵
第2个回答 2007-10-30
主要是分配内存的问题.
a[i][j]是数组的数组,意思是定义i个元素的数组,每个元素都是一个含有j个元素的数组.
a[][4]是定义了n个含有4个元素的数组,如:
a[][4]={{1,2,3,4},{5,4,3,2},{6,7,8,9}}是定义了3个"含有4个元素的数组"的数组.虽然3个自定义的,但是是确定的数字。程序可以分配内存.
而a[3][]是定定义了3个"含有n个元素的数组"的数组.如:
a[3][]={{1,2,3}{3,4}{5,6}},由于n的值是不确定的(如上有3个的,2个的),所以程序无法为这个数组分配内存空间.