我想调用一个函数,返回二维数组,但是一直不对,写了一个简单的程序,还请各位大神给看一下,
#include
#include
float*q[3];int i,j;
int main()
{
float f[3][2],A[3][2];
float*(TIME(float E[3][2]));
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
{f[i][j]=j+i;printf("%f\n",f[i][j]);}
}
q=TIME(&f[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
{
A[i][j]=(*(q+i)+j);
printf("%f\n",A[i][j]);
}
}
}
float*(TIME(float E[3][2]))
{
float F[3][2];
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
{F[i][j]=2*E[i][j];}
}
for(i=0;i<=2;i++)
{q[i]=F[i];}
return *q;
}
#include <stdio.h>
int i, j;
float F[3][2];
int main()
{
float(*TIME(float E[3][2]))[2];
float f[3][2], A[3][2];
float(*q)[2];
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
f[i][j] = j + i; printf("%f\n", f[i][j]);
}
}
q = TIME(f);
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
A[i][j] = *(*(q + i) + j);
printf("%f\n", A[i][j]);
}
}
getchar();
}
float(*TIME(float E[3][2]))[2]
{
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
F[i][j] = 2 * E[i][j];
}
}
return F;
}
结果
0.000000
1.000000
1.000000
2.000000
2.000000
3.000000
0.000000
2.000000
2.000000
4.000000
4.000000
6.000000
改了一点。没执行。看看是不是你要的
#include <stdio.h>
float*q[3]; int i, j;
int main()
{
float f[3][2], A[3][2];
//与TIME函数的定义保持一致
float**(TIME(float E[3][2]));
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
f[i][j] = j + i; printf("%f\n", f[i][j]);
}
}
//我吧这句拆成了两句,这里有两个问题
//第一个问题。你的原文是q=......
//q是一个数组,所以它是不能被赋值的,只有它的元素能被赋值
float**q0;
//第二个问题,TIME(&f[0])
//也不完全是问题.不过既然说这个,那么,&f[0]就是f
q0 = TIME(f);
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
//因为上文另给了一个q0,所以根据上下文.我吧这里改为了q0
A[i][j] = *(*(q0 + i) + j);
printf("%f\n", A[i][j]);
}
}
}
//你的目标是返回一个二位数组,所以应该返回的类型是float**不是原文的float*
float**TIME(float E[3][2])
{
float F[3][2];
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
F[i][j] = 2 * E[i][j];
}
}
for (i = 0; i <= 2; i++)
{
q[i] = F[i];
}
//返回q,*q就是q[0],q[0]是float*类型的,应该不是你想要的吧
return q;
}