问题描述
我在作业中收到了这条语句,并被告知要更正错误。我不知道该声明的确切目的是什么,有人可以解释一下吗?谢谢。
double a[1][2] = {{2,3},{3,2}};
解决方法
你想要
double a[][2] = {{2,3},{3,2}};
C++ 允许您省略第一维的边界,但不能省略其他边界。 double a[2][2]
是一种替代方法,但它是多余的。从某种意义上说,我编写它的方式是可扩展的
double a[][2] = {{2,2},{0,0}};
将创建一个多维数组,其中第一维的边界设置为 3。
,我不知道声明的确切目的是什么,有人可以解释一下吗?
该语句的目标是声明一个二维数组并使用一些值对其进行初始化,尽管存在冗余风险。
您提到的错误:
错误:'double [1][2]'的初始值设定项过多`
我认为是不言自明的,初始化列表中的值太多,您需要尝试了解数组可以取多少个值,以及分配了多少个值,然后从中得出结论并正确相应的代码。
说得更清楚,你肯定知道二维数组的第一维通常表示为行数,第二维表示列数,所以问题是,一个数组可以有多少个元素1 行和 2 列采取?或者,如果您愿意,一个 2 X 1
二维数组可以包含多少个元素,一个 5 X 5
元素又如何?
@Bathsheba 和@David C. Rankin 在他们的评论中都是正确的,所以我将重新总结所说的内容,希望它有意义,但方式不同。平心而论,这并不是最明显的错误。
您有 double a[1][2] = {{2,2}};
行,要求您查找并解决代码中的错误。您的错误陈述是“double[a][b]
的初始值设定项过多”。如果你解构这行代码,它就会开始变得更有意义。
double a[1][2]
是您对 1x2 二维数组的声明。从视觉上看,您可以想象从当前行创建的内容如下所示:
// 1x2; I could be wrong about the order in which the numbers are assigned,so grain of salt here:
╔═════╗
║ 2 ║ // holds the 2 from {2,3}
╠═════╣
║ 3 ║ // holds the 3 from {3,2}
╚═════╝
该数组的每个盒子、单元格或单元在任何给定时刻只能存储一个值。
现在让我们看看赋值: = { {2,2} };
这些列表中的每一个都包含两个值,总共四个。你现在看到错误了吗?这行代码试图将太多的值放入太小的容器(这就是数组,它只是保存数据的东西,无论维数如何)。因此,如果您的目标是存储所有四个值,那么在视觉上,您可以想象它看起来像这样:
// 2x2; again,grain of salt
╔═════╦═════╗
║ 2 ║ 3 ║ // {2,3}
╠═════╬═════╣
║ 3 ║ 2 ║ // {3,2}
╚═════╩═════╝
这至少可以通过几种方式完成,首先,按照@David C. Rankin 的建议,使声明与赋值相匹配,
即改变double a[1][2] = { {2,2} };
到double a[2][2] = { {2,2} };
或第二个,如@Bathsheba 所建议的那样,更改声明,使其自动检测您要分配的内容的维度,即表单 double a[][2]
,如前所述,它不能是另一个左右,比如double a[2][]
。