用数组做函数形参有多少种写法?解决方法

用数组做函数形参有多少种写法?
我见过的如下
(1)int fn(int a[] ,int n)
(2) int fn(int [],int )(这个仅限声明时用)

(3) 
main()
{
  int per[3],*p;
  ...........
  for(p=per;p<per+3;p++)
  ...........(这种用法没搞懂,求解)
}

还有别的吗?
第二种写成 int fn(int a[],int )或者int fn(int a[],int n )行吗?

------解决方案--------------------
(3) 
main()
{
int per[3],*p;
...........
for(p=per;p<per+3;p++) // 和for(int i = 0; i < 3; i++)循环次数一样,都是循环三次
...........(这种用法没搞懂,求解) 
}

还有别的吗?
第二种写成 int fn(int a[],int )// 可以,也只限于声明时
或者int fn(int a[],int n )行吗? // OK

还有用指针参数作为形参时,实参也可以传递数组名