Diferença entre passar array e ponteiro de array em função em C

Qual é a diferença entre as duas funções em C? void f1(double a[]) { //... } void f2(double *a) { //... } Se eu chamasse as funções em uma matriz substancialmente longa, essas duas funções se comportariam de maneira diferente, ocupariam mais espaço na