数组下标运算符 [ ]
后跟 [
] (方括号) 中的表达式的后缀表达式指定数组的元素。 括号内的表达式称为 下标。 数组的第一个元素具有下标 0。
根据定义,表达式
a[b] 等价于表达式 *((a) + (b)),并且由于 "添加" 是关联的,因此它也等价于 b[a]。 在表达式 a 和 b之间,一个必须是指向类型 T的指针,另一个必须具有整数或枚举类型。 数组下标的结果是 lvalue。 以下示例对此进行了演示:#include <stdio.h>
int main(void) {
int a[3] = { 10, 20, 30 };
printf("a[0] = %d\n", a[0]);
printf("a[1] = %d\n", 1[a]);
printf("a[2] = %d\n", *(2 + a));
return 0;
}请参阅以上示例的输出:a[0] = 10
a[1] = 20
a[2] = 30
如果重载类的 ,则上述关于下标运算符所需表达式类型以及下标运算符和指针运算之间的关系限制将不再适用。 operator[]
每个数组的第一个元素具有下标 0。 表达式 contract[35] 引用数组 contract中的 36th 元素。
在多维数组中,您可以通过最频繁地递增最右边的下标来引用每个元素 (按存储位置递增的顺序)。
例如,以下语句将值
100 赋予数组 code[4][3][6]中的每个元素:for (first = 0; first < 4; ++first)
{
for (second = 0; second < 3; ++second)
{
for (third = 0; third < 6; ++third)
{
code[first][second][third] =
100;
}
}
}
C99 允许对非左值的数组进行下标操作。 以下示例在 C99:struct trio{int a[3];};
struct trio f();
foo (int index)
{
return f().a[index];
}