有关C++的一个很奇怪的问题
为了将问题表述清楚点,代码像下面:main()
{ int i,j;
static double a[4][4]={ {5.0,7.0,6.0,5.0},
{7.0,10.0,8.0,7.0},
{6.0,8.0,10.0,9.0},
{5.0,7.0,9.0,10.0}};
static double b[4][4],c[4][4];
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
b[i][j]=a[i][j];
i=bssgj(a,4); //这里就不是很明白了,为什么可以把a直接传递呢?传递
//的是二维数组a[4][4]吗?
......
}
int bssgj(a,n)
int n;
double a[]; //这里为什么又是一维数组呢?
{ int i,j,k,m;
double w,g,*b;
b=malloc(n*sizeof(double));
for (k=0; k<=n-1; k++)
{ w=a[0];
if (fabs(w)+1.0==1.0)
{ free(b); printf("fail\n"); return(-2);}
m=n-k-1;
for (i=1; i<=n-1; i++)
{ g=a[i*n]; b[i]=g/w;
if (i<=m) b[i]=-b[i];
for (j=1; j<=i; j++)
a[(i-1)*n+j-1]=a[i*n+j]+g*b[j];
}
a[n*n-1]=1.0/w;
for (i=1; i<=n-1; i++)
a[(n-1)*n+i-1]=b[i];
}
...
return(2);
}
这段代码在c语言中编译运行是可以的,但上面的问题还是想不明白,明明a[][]是一维数组怎么在bssgi中就是一维的了呢?。改为c++编译就出错了。。请问这是怎么回事呢?应该怎样改为C++呢?我不想改动bssgj(a,n)里面的代码。
/谢谢啦