C ++多维数组

时间:2012-12-07 03:54:36

标签: c++ c syntax multidimensional-array operators

我们有代码:

int arr[3][4];

所以arr是:

  1. 包含3个元素的数组,每个元素都是4个int的数组。

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

  3. 哪一个是正确的,为什么?它如何与更高维数组合作?我想这涉及运算符优先级和关联性。

2 个答案:

答案 0 :(得分:1)

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

此类声明最好使用右侧左侧规则进行解析,您可以阅读herehere

来自C ++标准草案的

$ 8.3.4: ...

  

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

...

  

注意:由此可见,C ++中的数组存储在行方式中   (最后的下标变化最快)和第一个下标   声明有助于确定阵列消耗的存储量   但在下标计算中没有其他部分。 - 后注]

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

答案 1 :(得分:0)

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

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