请问int x[][3]={0}; int x[][3]={{1,2,3},{4,5,6}};如何理解其中的[]?

以下数组定义中错误的是()
A. int x[2][3]={1,2,3,4,5,6};
B. int x[][3]={0};
C. int x[][3]={{1,2,3},{4,5,6}};
D. int x[2][3]={{1,2},{3,4},{5,6}};
选D,但是不明白ABC对在哪里

1. int x[2][3]={{1,2},{3,4},{5,6}}
(1)这句的左边含义是:有一个二维数组,2行3列,一共就是6个int类型的数据。
(2)这句的右边含义是:最里面的三个花括号,代表的是三行,每个花括号里有两个数据,代表的是每行有2列,所以代表的意思是:3行2列的一个int类型的二维数组。
(3)2行3列和3行2列的两个二维数组,当然是不一样的。所以把后者赋值给前者。
2. int x[][3]={0}:代表的是行数未知,列数是3的二维数组,把该数组里的数组全部赋值为0。
(1)int x[][3]={{1,2,3},{4,5,6}}:这个等号右边是2行3列的int类型的数据
(2)等号左边的x[][3]代表的是:行数未知,列数是3的二维数组,由于赋值操作,于是可以得出行数是2。
(3)所以x[][3]是一个2行3列的一个二维数组,即:x[2][3]。追问

A答案中的int x[2][3]代表的是两行三列的二维数组,但是右边{1,2,3,4,5,6};却不是这个格式为什么也是对的呢?如何理解呢?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-10
A. int x[2][3]={1,2,3,4,5,6}; 数组共6个元素,全部初始化了。
B. int x[][3]={0}; 数组只要一行就够了,共三个元素。
C. int x[][3]={{1,2,3},{4,5,6}}; 数组有2 行(由初始化的数据个数确定),每行3个元素。追问

A答案中的int x[2][3]代表的是两行三列的二维数组,但是右边{1,2,3,4,5,6};却不是这个格式为什么也是对的呢?初始化又是什么意思啊?

追答

虽然“不是这个格式”,但是给定了全部6个元素的值,也是可以的。它会自动填满第一行,再第二行,……。
所谓“初始化”,就是给变量一个开始使用前确定的数值。在这里是声明变量的同时给它们确定的值。

第2个回答  2018-03-10
[]就是让编译器猜有几行