函数头部与指针,该怎么处理

函数头部与指针
void   ab(int   a[][],int   m,int   n)
这样的函数头部是正确的吗
void   ab(int   a[][],int   m,int   n)
{int   i,j,k=0;
  for(i=0;i <m;i++)
    for(j=0;j <n;j++)
      a[i][j]=k++;
}
main()
{int   a[5][4],i,j;
  ab(a,5,4);
  for(i=0;i <5;i++)
    {for(j=0;j <4;j++)
        printf( "%d ",a[i][j]);
      printf( "\n ");
    }
}
这个程序有问题吗

------解决方案--------------------
int a[][]不正确。
想一想要是你去写编译器的话,碰到这两个空空的中括号,你咋将一个例如a[1][2]这样的变量转化成实际的地址?