#include<iostream>
using namespace std;
int main()
{
int a[]={1,2,3,4,5};
cout<<a[3]<<endl;
cout<<3[a]<<endl;
cout<<(a+2)[1]<<endl;
cout<<1[a+2]<<endl;
}
以上代码均能正确运行。
C++ 允许对指针进行灵活的算术运算,包括将整数与指针相加。
i[a] 会被解析为 *(a + i),因此 3[a]能正常运行。
特别的,i[a + j] 和 (a + i)[j] 会被解析为 *(i + (a + j)) 和 *((a + i) + j) ,也就是 *(a + i + j),因此 1[a + 2] 和 (a+2)[1] 也能正常运行。
(为了可读性和同事的血压考虑,不建议日常开发使用=)
但 [a + j], [a] i, [i] a 会报错,也就是 数组访问运算符 [ ] 在方括号前和方括号中 必须有一个整数表达式和一个指针或数组名。
有任何错误欢迎指出。