在任何情况下 二维数组的初始化都可以省略第一维大小。为什么错误?

如题所述

如果省略第一维大小,则必须给出初值表,编译器才能根据初值表确定第一维的最小长度。如果既没有第一维长度又没有初值表,将导致编译错误。

二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。

因此,可以省略第一维的维数,不能省略其他维的维数。



扩展资料

二维数组的初始化方法

1、分行给二维数组赋初值。这种赋初值的方法比较直观,将第一个花括号内的数据赋给第一行的元素、第二个花括号内的数据赋给第二行的元素……即每行看作一个元素,按行赋初值。

2、可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。不过这种方法如果数据多,写成一大片,容易遗漏,也不易检查。

3、可以只对部分元素赋初值。它的作用是对第一行的前两个元素赋值、第二行和第三行的第一个元素赋值,其余元素自动为 0。

4、int a[3][4]={0};二维数组“清零”,里面每一个元素都是零。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-18
如果省略第一维大小,则必须给出初值表,编译器才能根据初值表确定第一维的最小长度。如果既没有第一维长度又没有初值表,将导致编译错误。本回答被提问者和网友采纳
第2个回答  2020-01-01
这是因为,在至少初始化一个元素值的情况下,才能省略第一维的大小。所以,在任何情况下 二维数组的初始化都可以省略第一维大小,这话是错的。

在任何情况下 二维数组的初始化都可以省略第一维大小。为什么错误?
如果省略第一维大小,则必须给出初值表,编译器才能根据初值表确定第一维的最小长度。如果既没有第一维长度又没有初值表,将导致编译错误。将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。因此,可以省略第一维的维数...

定义二维数组为什么可以省略第一维的长度,但却不能省略第二维的长度...
有初始化的时候,第二维的数字代表分配内存的长度,第一维的数字代表分配内存倍数;倍数可以让机器去数,但长度没有的话就不好开辟空间了。

c++初始化二维数组为何必须写列数?
二维数组的初始化分为两种,一种是顺序初始化,一种是按行初始化。所谓按顺序初始化就是先从左向右再由上而下地初始化,即第一行所有元素都初始化好以后再对第二行初始化。而按行初始化则是用一对大括号来表示每一行,跳过前一行没有初始化的元素,在行内从左向右地进行初始化。对于没有初始化的...

为什么2维数组行可以省略
因为二维数组在初始化时,是按行进行赋值的,并且每行元素(最好)用大括号括起来。看个例子很好理解的!!!譬如定义a[2][3],可以由两种情况省略第一维的值。如下:a[][3]={{1,2}{1,2,3}},很明显行值是可以省的,因为不会造成歧义!!!注意:使用大括号括对每一行进行赋值的这种情况下...

...定义二维数组时,可以将该数组的两个维数全部省略?
第一个维数也不是都可以省略的。只有在写明第二维的大小,并同时为二维数组初始化时,才能省略第一维的大小。例如:int a[][4]={{1,2,3,4},{5,6,7},{8,9},{10}};int b[][4]={1,2,3,4,5};它们就等价于:int a[4][4]={{1,2,3,4},{5,6,7,0},{8,9,0,0},{10...

二维数组中哪个数值可以不写
在构建二维数组时,如果所有的元素值都已被明确指定,那么可以省略行下标的定义,即无需指定第一维的长度。但是,第二维的长度是必须明确给出的,因为省略它会导致系统无法准确分配存储空间,从而引发混淆或错误。例如,在声明一个二维数组时,可以这样写:int a[][]={1, 2, 3, 4, 5, 6}; ...

二维数组初始化时可以省略行或列吗?
按行连续初始化int a[2][3]={5,6,7,8,9,10};二维数组初始化中,可以省略行,但不能省略列 a选项,省略行列,错误 b选项,省略行列,错误 c选项, int a[2][3]为 2行3列, int a[2][3] = {{1,2},{3,4},{5,6}};初始化数据为3行2列,错误 D选项正确,二维数组初始化,...

二维数组初始化时如果没有将所有元素赋值,可否省略行数?
int arr[][3] = {1};这个是正确的,但初始化省略行数要看情况。

定义二维数组是可不可以省略第一个下标表达式
可以,但是需要初始化 如 int a[][2]={{1,2},{3,4}};通过实际的初始值来隐含指定第一个下标为2

c++二维数组初始化问题
{{1,0,0} {2,3,0} {4,5,6} {2,0,0}} 数组在内存中默认是按行存储的,所以你在初始化的时候,已经制定了多少行了,就可以省略第一个参数了,即行个数。另外:虽然你在这里是二维数组,其实在内存中还是一块连续的一位数组保存的。&b[1][0] - &b[0][2]只差4个字节即可验证。

相似回答