为何typedef可以实现在函数的形参中对数组的引用

为什么typedef可以实现在函数的形参中对数组的引用?
下面的示例中 fun1报错,fun2不报错

void fun1(int &arr[8]){
puts("fun1");
}
typedef int ArrType[8];
void fun2(ArrType &arr){
puts("fun2");
}

int main(){
int a[8];
fun1(a);
fun2(a);
}

------解决思路----------------------
void fun1(int &arr[8]) ==> void fun1(int (&arr)[8])