c++初始化二维数组为何必须写列数?

2024-11-22 08:39:08
推荐回答(3个)
回答(1):

首先,数组定义的时候必须指定大小。指定的含义是指要么你显式地写出数组的长度,或者是让编译器自己通过初始化的元素的个数去计算长度。无论哪种,都是能确定大小的,当数组创建完成后,这个大小就无法改变了。
其次,数组的初始化可以只初始化前面一部分,例如 int a[10] = {1,2,3}。
然后,对于二维数组,如果你指定了行数和列数,那么这种情况最简单,直接用你写的行列数;如果只指定了列数,那么必须有一个初始化列表,然后就会按照列数c和初始化的元素个数n去计算行数,行数r等于n/c的上取整。但如果你不指定列数,C编译器不会给你统计初始化列表然后计算应该有多少列,而且没有初始化列表的根本无法确定行列数。
所以必须有列数。

回答(2):

百度了一下,知道有两种初始化方式,但是都是先从左到右,所以需要知道列数才能初始化每一行。行数不知道,知道列数,可以按后面的内容一行行初始化话。不知道列数就不知道一行初始化多少 。
以下内容是百度到的,
二维数组的初始化分为两种,一种是顺序初始化,一种是按行初始化。
所谓按顺序初始化就是先从左向右再由上而下地初始化,即第一行所有元素都初始化好以后再对第二行初始化。
而按行初始化则是用一对大括号来表示每一行,跳过前一行没有初始化的元素,在行内从左向右地进行初始化。对于没有初始化的元素,则都是一个不确定的值。

回答(3):

int[][]={1,2,3,4,5,6}你能说清楚这几个元素的位置?如果是int[][3]={1,2,3,4,5,6};你就会知道是{1,2,3},{4,5,6}这两行了。你可能又要问,为什么不能这样写:int[2][]={1,2,3,4,5,6}?没办法c语言就是这样规定的!