我该如何更正这个说法?

问题描述

我在作业中收到了这条语句,并被告知要更正错误。我不知道该声明的确切目的是什么,有人可以解释一下吗?谢谢。

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][]