后跟用方括号 (
[ ]
) 括起的表达式的后缀表达式是数组对象元素的下标表示形式。 下标表达式表示地址的值,该地址在表示为以下形式时位于超出
postfix-expression
的
expression
位置
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)
*(b + a)
相加运算符中提供了加法运算符的转换规则)。 若要将整型值转换为地址偏移量,请将其乘以指针寻址的类型长度。
例如,假定标识符 line
引用 int
值的数组。 以下过程用于计算下标表达式 line[ i ]
:
将整数值 i
乘以定义为 int
项的长度的字节数。 i
的转换后的值表示 i
int
位置。
此转换后的值与原始指针值 (line
) 相加,以生成与 line
之间偏移 i
int
位置的地址。
间接寻址运算符将应用于此新地址。 结果是位于该位置(直观地说,就是 line [ i ]
)的数组元素的值。
下标表达式 line[0]
表示行的第一个元素的值,因为 line
表示的地址的偏移量为 0。 同样,表达式(如 line[5]
)引用了从行偏移 5 个位置的元素,或数组的第 6 个元素。
下标运算符: