一个表达式执行的后缀表达式在方括号 ([]) 中是数组对象元素的一个 subscripted 表示。下标表达式表示该介于 后缀表达式外部的表达式 位置,则表示为的地址
postfix-expression [ expression ]
通常, 后缀表达式 表示的值是指针值,如数组标识符,因此, 表达式 是一个整数值。但是,语法上的需的任何是一个表达式是指针类型,另一个整型。因此整数值可以在 后缀表达式 位置,并且指针值可以在该 表达式或 “下标的括号,”位置。例如,此代码是合法的:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
下标表达式通常用于引用数组元素,但是,您可以将下标于所有指针。了解在中括号 ([]) 必须将值序列, 表达式 。
下标表达式通过将整数值计算为指针值,然后应用间接寻址运算符 ()*****于该结果。(有关间接寻址运算符的讨论参见 间接和运算符地址 。)实际上,用于一维数组,以下四个表达式等效,假定, a 是指针,并 b 是整数:
a[b]
*(a + b)
*(b + a)
b[a]
根据加号的转换规则 (以 附加运算符),整数值转换为地址偏移量被乘以用指针解决的类型的长度。
例如,假定该标识符 line 引用 int 值。下面的过程使用下标计算表达式 line[ i ]:
整数值 i 乘以作为 int 项目的长度定义字节数。i 的转换的值表示 i int 位置。
此转换的值添加到原始指针值 (line) 生成偏离 line的 i int 位置的地址。
间接运算符应用于新地址。结果是数组元素的值在该位置 (直观, line [ i ])。
,因为从 line 表示的地址的偏移量为 0,下标表达式 line[0] 该行的第一个元素的值。同样,一个表达式 (如 line[5] 引用某行的元素偏移量五个位置或数组的第六个元素。