多维数组 (C)

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


expression1  
[  
expression2  
] [  
expression3  
]...  

下标表达式从左至右关联。 首先计算最左侧的下标表达式 expression1[expression2]。 通过添加 expression1 和 expression2 得到的地址构成一个指针表达式;然后 expression3 将添加到此指针表达式,从而构成一个新的指针表达式,依此类推,直到添加最后一个下标表达式。 在计算最后一个下标表达式之后应用间接寻址运算符 (*),除非最终指针值寻址数组类型(请参阅以下示例)。

具有多个下标的表达式引用“多维数组”的元素。 多维数组是其元素为数组的数组。 例如,三维数组的第一个元素是一个具有两个维度的数组。

示例

在下面的示例中,将使用 3 个元素声明名为 prop 的数组,其中每个元素都是 int 值的 4 x 6 数组。

int prop[3][4][6];  
int i, *ip, (*ipp)[6];  

prop 数组的引用如下所示:

i = prop[0][0][1];  

上面的示例演示如何引用 int 的第二个单独的 prop 元素。 数组将按行存储,因此最后一个下标变化最快;表达式 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]; 的结果是一个寻址到一个二维数组的指针值。

另请参阅

下标运算符: