您好,欢迎来到99网。
搜索
您的当前位置:首页c语言中一维数组为什么一定要对长度定义,不能自动补0而二维数组就可以没有行数长度,自动补0呢?

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

来源:99网

有网友碰到这样的问题“c语言中一维数组为什么一定要对长度定义,不能自动补0而二维数组就可以没有行数长度,自动补0呢?”。小编为您整理了以下解决方案,希望对您有帮助:

解决方案1:

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

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

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

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

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

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

解决方案2:

二维数组根据初始化的组数确定一维的数量,根据二维的数量开辟内存,因此一维可以省略,二维不可省略。

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务