这个为什么编译过不了啊

#include
using namespace std;
int change(int *a[],int k,int n)
{
for(int i=k;i<n;i++)
{
*a=*(a+1);
}
n--;
return n;
}
void same(int *a[],int n,int m)
{
int flag=1,b[10000][100]={0},x=0,k=0;
int sum=1;
for(int i=0;i<n;i++)
{
flag=1;sum=1;
for(int j=i+1;j<n;j++)
{
for(k=0;k<m;k++)
{
if(a[i][k]!=a[j][k])
{
flag=0;
break;
}
}
if(flag==1)
{
sum++;
n=change(a,k,n);
b[x][0]=sum;
for(int l=1;l<=m;l++)
{
b[x][l]=a[j][l-1];
}
x++;
}
}
}
for(int i=0;i<sum;i++)
{
for(int j=0;j<=m;j++)
{
cout<<b[i][j];
if(j!=m) cout<<' ';
}
if(i!=sum-1) cout<<endl;
}
}
int main()
{
int n,m;
int a[10000][100];
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
same(a,n,m);
}


*a=*(a+1);
这种写法编译不过的。你的参数是*a[],a+1表示要到下一行,而不是下一个数据。但是a[]又没有指定长度,所以编译器无法处理