c语言中一维数组为什么一定要对长度定义,不能自动补0而二维数组就可以没有行数长度,自动补0呢?

如题所述

首先要明确数组的在计算机的分配方式。

计算机会分配一块《连续》的内存给数组来使用,这样就可以通过《下标》很方便的访问数组的元素。因此数组的长度就一定是要固定的,因为内存是一直在动态的分配和释放的,如果数组的长度不固定,那么数组后面的内存到底还要不要分配给别人。如果分配了,数组忽然要增加,那数组内存就不能是连续的了。

所有定义数组时可以省略的字段都是因为可以确定长度,才可以省略。不是说一维数组不能省略长度,当对数组中所有元素都初始化的时候是可以省略的。

比如int a[] = {1,2,3,4,5},这么一定可以省略长度,因为数组长度固定是5了。

二维数组,当不初始化数组中的任何一个元素时,行列都需要制定,这样才能确定数组的大小。当初始化了其中的元素时,约定制定列数,就可以通过初始化的元素个数,算出最小的行数。

但是行列都不制定就不可以了,比如我初始化了6个元素,即可以是a[2][3]也可以是a[3][2]也可以是a[1][6],会发生歧义,是不允许的。所以二维数组的初始化必须制定一个,至于只必须制定行还是必须制定列,再C语言定义的时候大家预定俗成了制定列,所以就延续下来了。追问

大神讲得太明白了,非常感谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-12
二维数组根据初始化的组数确定一维的数量,根据二维的数量开辟内存,因此一维可以省略,二维不可省略。

数组的长度一定是固定的吗
数组在定义的时候就需要固定长度,长度是不可变的。不过二维数组有点特殊,在定义的时候后面一个方框可以空着,因为后一个框里装的是一维数组的个数,同一个二维数组中的一位数组存在不等长的情况,所以后一个可以不定长。数组是计算机编程语言上,对于“Array"的中文称呼,是用于储存多个相同类型数据的...

数组的长度一定是固定的吗
是的,数组在定义的时候就需要固定长度,长度是不可变的。不过二维数组有点特殊 如:arr【】【】 定义的时候后面一个方框可以空着,因为后一个框里装的是一维数组的个数,同一个二维数组中的一位数组存在不等长的情况,所以后一个可以不定长。

c语言中数组长度怎么设置?
定义数组时在中括号内写上代表长度的数字,定义一维数组和二维数组是一样的。注意长度是直接用数字大小来代表,而索引时是从0开始算的!例如:include<stdio.h>main(){ int a[5];\/\/定义一个长度为5的一维数组a int b[5][6];\/\/定义一个5行6列的二维数组b}在定义数组时可以不定义长度...

c语言中数组长度怎么设置?
在C语言中,数组的长度设置方法相对直接明了。当你定义一维或二维数组时,只需在中括号[]内提供长度值即可。一维数组和二维数组的长度声明方式相同,关键在于指定的数字表示的是数组的大小,注意索引是从0开始计算的。例如,要定义一个长度为5的一维整数数组,你可以这样做:c int a[5]; \/\/ 定义一维...

变量定义时,如果对数组全部元素赋初值,则数组长度
数组长度可以不用指定,默认就是所有赋初值的个数;如果想扩大数组长度,则需要指定,且必须大于已赋初值的个数。

C语言 关于数组长度问题
此时还应该有几个没有赋初值的数组元素).而a[3][]的意思从表面上看可以成立,但问题是编译器不能直接识别其第二维的确切长度(你可以考虑,如果总的初值个数为2时,可以认为a的第二维长度为1,也可以是2,...),这样就会产生错误.所以,可以a[][4]={*,*,*……}这样定义,而不能定义a[3][]...

C语言中数组定义不正确的是哪项?
数组定义中不正确的是D项,int d[3][]=1,2,1,2,3,1,2,3,4;一维数组的定义方式为类型说明符数组名[常量表达式]。C语言中多维数组赋初值时可以部分赋值,也可以不指定除第一维以外的其他维的大小,故选项C正确。另外,如果对全部数组元素都赋初值,则定义数组时对第一维的长度可以不指定,但...

如果数组的长度不确定怎么办
C语言中,对于不知道长度的数组怎样输入。。。1、一维数组程序举例:冒泡法。得到结果进行输出。二维数组常称为矩阵。把二维数组写成行列的排列形式,可以形象的理解二维数组的逻辑结构。2、C语言中不能定义未确定个数的数组,不过可以用指针来变相的完成你的要求。3、输入数组需要使用指针获取地址后,就能...

为什么定义一个二维数组,行数可以省略,列数不可以
因为二维数组存储的时候是"先行后列", 如果不指定烈数, 他就不能知道一行放几个数据了 只要知道了列数, 排头放就可以知道一共能放多少行

C语言二维数组问题
1、name[NUM][10]表示NUM(10)行10列的数组,NUM表示10个人,后面的10表示姓名字符串的长度(最长为9,后面系统自动加上'\\0')2、不能用一维数组定义姓名,因为是字符类型的数组,姓名中包含多个字符。一维数组只能保存一个姓名。3、stmp是一维数组,保存一个字符串的。不是用来保存10个人的姓名,...

相似回答