请问一个关于对象数组和指针的有关问题

请教一个关于对象数组和指针的问题
//请教一个关于对象数组和指针的问题

Class A
{
  public:
  f();
  private:
  int n;
}

A a[i]; //定义对象数组
A *p; //定义指向A类对象的指针
p=a;

=======================================
为什么 (p+i-1)->f() 和 a[i-1].f() 等价

但 *(p+i-1).f() 和 a[i-1].f() 不等价。

编译错误提示error C2228: left of '.f' must have class/struct/union type

------解决方案--------------------
需要把对象用括号括起来,编译器整不清*的作用范围
(*(p+i-1)).f()
------解决方案--------------------
当不确定算符优先级时不妨多加几层括号。