我们有代码:
int arr[3][4];
所以arr
是:
包含3个元素的数组,每个元素都是4个int的数组。
一个包含4个元素的数组,每个元素都是一个3 int的数组。
哪一个是正确的,为什么?它如何与更高维数组合作?我想这涉及运算符优先级和关联性。
答案 0 :(得分:1)
你的第一个解释是正确的。
此类声明最好使用右侧左侧规则进行解析,您可以阅读here和here
来自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列,因为这类似于线性代数中的数学符号,其中行首先列出。