1

我们有代码:

int arr[3][4];

也是这样arr

  1. 一个由 3 个元素组成的数组,每个元素都是一个 4 个 int 的数组。

  2. 一个由 4 个元素组成的数组,每个元素都是一个 3 个 int 的数组。

哪一个是对的,为什么?它如何与更高维数组一起工作?我想这与运算符优先级和关联性有关。

4

2 回答 2

1

你的第一个解释是正确的。

此类声明最好使用Right Left 规则进行解析,您可以在此处此处阅读

C++ 标准草案中的 8.3.4 美元:...

示例:考虑 int x[3][5]; 这里 x 是一个 3 × 5 的整数数组。

...

注意:由此可知,C++ 中的数组是按存储的 (最后一个下标变化最快),声明中的第一个下标有助于确定数组消耗的存储量,但在下标计算中没有其他作用。——尾注]

注意 C++ 没有运算符[][]。它只有 operator[]

于 2012-12-07T03:59:55.317 回答
0

我发现最容易想到多维数组中的“行”和“列”,而不是试图让我的思想围绕“数组的数组”。这有一个方便的属性,决定哪个索引是行,哪个是列。换句话说,我可以将其int arr[3][4];视为 3 行 4 列或 4 行 3 列的二维数组。只要我的代码与我对数组的心理看法一致,一切都会好起来的。但是,如果我在程序中途切换视图,事情就会开始崩溃。

话虽如此,通常我更喜欢将此示例视为 3 行和 4 列,因为这类似于线性代数中首先列出行的数学符号。

于 2012-12-07T04:05:05.787 回答