一维数组

后跟用方括号 ([ ]) 括起的表达式的后缀表达式是数组对象元素的下标表示形式。 下标表达式表示地址的值,该地址在表示为以下形式时位于超出 postfix-expressionexpression 位置

postfix-expression [ expression ]

通常,postfix-expression 表示的值是一个指针值(如数组标识符),而 expression 是一个整数值。 但是,从语法上来说,只需要一个表达式是指针类型,另一个表达式是整型类型。 整数值可以位于 postfix-expression 位置,指针值可以位于 expression 的方括号中或“下标”位置。 例如,以下代码是合法的:

// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
   ptr = a;
   sum = 4[ptr];
}

下标表达式通常用于引用数组元素,但你可以将下标应用于任何指针。 无论值的顺序如何,expression 都必须用方括号 ([ ]) 括起来。

通过将整数值添加到指针值,然后将间接寻址运算符 (*) 应用于结果,可以计算下标表达式。 (有关间接寻址运算符的讨论,请参阅间接寻址运算符和 Address-of 运算符。)实际上,对于一维数组,假定 a 是指针,b 是整数,则以下四个表达式等效:

a[b]
*(a + b)
*(b + a)
b[a]

相加运算符中提供了加法运算符的转换规则)。 若要将整型值转换为地址偏移量,请将其乘以指针寻址的类型长度。

例如,假定标识符 line 引用 int 值的数组。 以下过程用于计算下标表达式 line[ i ]

  1. 将整数值 i 乘以定义为 int 项的长度的字节数。 i 的转换值表示 i int 位置。

  2. 此转换值将添加到原始指针值 (line) 以生成从 line 偏移 iint 个位置的地址。

  3. 间接寻址运算符将应用于此新地址。 结果是位于该位置(直观地说,就是 line [ i ])的数组元素的值。

下标表达式 line[0] 表示行的第一个元素的值,因为 line 表示的地址的偏移量为 0。 同样,表达式(如 line[5])引用了从行偏移 5 个位置的元素,或数组的第 6 个元素。

请参阅

下标运算符: