关于调用函数返回二维数组的问题

我想调用一个函数,返回二维数组,但是一直不对,写了一个简单的程序,还请各位大神给看一下,
#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;
}

  • 没想到二维数组还真是个问题。以前遇到类似的就直接malloc了
  • 根据你程序的意思改了下,看看是不是你要的
#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;
}