多维数组 (C)
下标表达式还可以有多个下标,如下所示:
expression1 [ expression2 ] [ expression3 ] /*...*/ ;
下标表达式从左至右关联。 首先计算最左侧的下标表达式 expression1[ expression2 ]
。 通过添加 expression1
和 expression2
得到的地址构成一个指针表达式;然后将 expression3
添加到此指针表达式,从而构成一个新的指针表达式,依此类推,直到添加最后一个下标表达式。 在计算了最后的 subscripted 表达式后,将应用间接寻址运算符 (*
),除非最终指针值将为数组类型寻址。
具有多个下标的表达式引用“多维数组”的元素。多维数组是其元素为数组的数组。 例如,三维数组的第一个元素是一个具有两个维度的数组。
示例
在下面的示例中,将使用 3 个元素声明名为 prop
的数组,其中每个元素都是 int
值的 4 x 6 数组。
int prop[3][4][6];
int i, *ip, (*ipp)[6];
对 prop
数组的引用如下所示:
i = prop[0][0][1];
该示例展示了如何引用 prop
的第二个单独的 int
元素。 数组将按行存储,因此最后一个下标变化最快;表达式 prop[0][0][2]
引用数组的下一个(第三个)元素,依此类推。
i = prop[2][1][3];
此语句是对 prop
的单个元素的更复杂的引用。 此表达式的计算方式如下:
第一个下标
2
乘以 4 x 6int
数组的大小,然后与指针值prop
相加。 结果将指向prop
的第三个 4 x 6 数组。第二个下标 (
1
) 乘以 6 元素int
数组的大小,然后与prop[2]
表示的地址相加。由于 6 元素数组的每个元素都是
int
值,因此最后一个下标3
先与int
的大小相乘,再与prop[2][1]
相加。 生成的指针将寻址到 6 元素数组的第四个元素。将对指针值应用间接寻址运算符。 结果是该地址处的
int
元素。
下面两个示例演示未应用间接寻址运算符的情况。
ip = prop[2][1];
ipp = prop[2];
在上面的第一个语句中,表达式 prop[2][1]
是对三维数组 prop
的有效引用;它引用一个 6 元素数组(上面已声明)。 由于指针值将寻址到一个数组,因此不会应用间接寻址运算符。
同样,第二个语句 prop[2]
中的表达式 ipp = prop[2];
的结果是一个寻址到一个二维数组的指针值。
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈