[求助] 如何返回一个二级指针呢?急,谢谢
void main(){
int k;
double (*c)[2];
……
S(256);
c=(double *[2])co(str,256,256);//老是说这里错了呢~该怎么写呢?
for(k=0;k<256;k++)
free(c[k]);
free(c);
}
double **co(double str[][2],int n,int m)
{
int k;
double (*c)[2];
double (*p)[2];
double (*q)[2];
c=(double**)malloc(sizeof(double*)*n);
for(k=0;k<1;k++)
c[k]=(double*)malloc(sizeof(double)*2);
p=(double**)malloc(sizeof(double*)*n/2);
for(k=0;k<1;k++)
p[k]=(double*)malloc(sizeof(double)*2);
q=(double**)malloc(sizeof(double*)*n/2);
for(k=0;k<1;k++)
q[k]=(double*)malloc(sizeof(double)*2);
if(n==1)
{
c[0][0]=str[0][0];
c[0][1]=str[0][1];
}
else
{
for(k=0;k<=n/2-1;k++)
{
tmp1[k][0]=str[2*k][0];
tmp1[k][1]=str[2*k][1];
tmp2[k][0]=str[2*k+1][0];
tmp2[k][1]=str[2*k+1][1];
}
p=(double *[2])co(tmp1,n/2,n/2);//这里也是,老是错……
q=(double *[2])co(tmp2,n/2,n/2);
for(k=0;k<n/2;k++)
{
c[k][0]=p[k][0]+q[k][0]*cos(2*3.14159265359*k/m)+q[k][1]
*sin(2*3.14159265359*k/m);
c[k+n/2][0]=p[k][0]-q[k][0]*cos(2*3.14159265359*k/m)-q[k]
[1]*sin(2*3.14159265359*k/m);
c[k][1]=p[k][1]-q[k][0]*sin(2*3.14159265359*k/m)+q[k][1]
*cos(2*3.14159265359*k/m);
c[k+n/2][1]=p[k][1]+q[k][0]*sin(2*3.14159265359*k/m)-q[k]
[1]*cos(2*3.14159265359*k/m);
}
}
for(k=0;k<n/2;k++)
free(p[k]);
free(p);
for(k=0;k<n/2;k++)
free(q[k]);
free(q);
return (double**)c;
}
其实就是快速付利叶。
本来用global data 搞那些矩阵。可以只有64kb,矩阵一大就不可以用了。
谢谢那位高手帮我看看阿~
多谢拉。好急得~