多维数组 (C)

下标表达式还可以有多个下标,如下所示:

expression1 [ expression2 ] [ expression3 ] /*...*/ ;

下标表达式从左至右关联。 首先计算最左侧的下标表达式 expression1[ expression2 ]。 通过添加 expression1expression2 得到的地址构成一个指针表达式;然后将 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 的单个元素的更复杂的引用。 此表达式的计算方式如下:

  1. 第一个下标 2 乘以 4 x 6 int 数组的大小,然后与指针值 prop 相加。 结果将指向 prop 的第三个 4 x 6 数组。

  2. 第二个下标 (1) 乘以 6 元素 int 数组的大小,然后与 prop[2] 表示的地址相加。

  3. 由于 6 元素数组的每个元素都是 int 值,因此最后一个下标 3 先与 int 的大小相乘,再与 prop[2][1] 相加。 生成的指针将寻址到 6 元素数组的第四个元素。

  4. 将对指针值应用间接寻址运算符。 结果是该地址处的 int 元素。

下面两个示例演示未应用间接寻址运算符的情况。

ip = prop[2][1];

ipp = prop[2];

在上面的第一个语句中,表达式 prop[2][1] 是对三维数组 prop 的有效引用;它引用一个 6 元素数组(上面已声明)。 由于指针值将寻址到一个数组,因此不会应用间接寻址运算符。

同样,第二个语句 prop[2] 中的表达式 ipp = prop[2]; 的结果是一个寻址到一个二维数组的指针值。

请参阅

下标运算符: