【问题标题】:Returning a matrix from a function从函数返回矩阵
【发布时间】:2016-12-04 03:50:42
【问题描述】:

如何从函数返回矩阵?我正在制作一个不断向函数发送矩阵并且还需要不断从函数返回矩阵的程序,我有点知道如何将矩阵发送给函数(使用双指针)但每次我尝试调用一个函数,它说它是不兼容的类型。 这是我使用的函数的示例:

float *filtrar(float val, int col, float **M)
{
    int i=0,j,k=0;
    float temp[4][6],linea[6];
    if (existe(val, col, M)>0)
    {
        for (i=0; i<tam; i++)
        {
            if (linea[col]==val)
            {
                for (j= 0; j <6; j++)
                    temp[k][j]=M[i][j];
                    k++;
                }
            }
        }
    }
    else
    {
        for (i=0; i<tam; i++)
        {
            if (linea[col]==inferior(val,col,M)||linea[col]==superior(val,col,M))
            {
                for (j= 0; j < 6; j++)
                {
                    temp[k][j]=M[i][j];
                    k++;
                }
            }
        }
    }
}

这是调用该函数的部分:

float **m=filtrar(v1,t1,agua_vapor);

这最后一部分是我需要你帮助的部分,因为我不知道如何将从函数中获得的矩阵赋给变量 m,我不知道它是否应该作为一个指针,一个双指针、公用矩阵等

如果有人能告诉我怎么做,我将不胜感激。

这是我如何声明一个矩阵来使用的示例,与前面的函数显示的使用的矩阵非常相似,以防有人想知道我是如何做到的:

float *carga_archivo(char nombre_de_archivo)
{
    float M[200][6];
    float *p[6], **q;
    int i=0;
    FILE *archivo;
    archivo=fopen(nombre_de_archivo,"r");
    while(!feof(archivo))
    {
        fscanf(archivo,"%f\t%f\t%f\t%f\t%f\t%f\n",&M[0][i],&M[1][i],&M[2][i],&M[3][i],&M[4][i],&M[5][i],&M[6][i]);
        i++;
    }
    tam=i;
    for(i=0;i<6;i++)
        p[i]=M[i];
    q=p;
    fclose (archivo);
    return M;
}

欢迎以书面形式或提出此问题的方式进行任何更正。

【问题讨论】:

  • 您的函数的返回值是 float * 类型,并且您已将 m 声明为 float**
  • 也在你的函数过滤器中,你从哪里返回函数?
  • @HardikSanghvi 我没有得到第二条评论,您是在问矩阵来自哪里?
  • float M[200][6]; 声明了一个 local 数组(针对该函数)。当函数返回时,函数栈被销毁。你的编译器应该对你发出警告。您不能返回指向本地声明对象的指针。当函数返回时,它指向的内存已经被释放。要么将M 作为单独的参数传递给函数,要么在函数内动态分配M,然后返回指向M 的指针。
  • 它不必是 global (事实上你应该限制使用全局变量,除非绝对必要)。您只需要确保在函数返回后返回指针的内存仍然存在。在carga_archivo 的情况下,M 在函数返回时被销毁。因此,将M 传递给carga_archivo(或使其成为全局)(或为M 动态分配存储空间(例如float (*M)[6] = calloc (200, sizeof *(*M)[6])); 因此它在函数返回后仍保持分配状态——您可以在编写时返回一个指向它的指针) )

标签: c function pointers matrix


【解决方案1】:

如果你想返回一个矩阵你需要将函数声明为矩阵类型,我的意思是:

float** filtrar(float val, int col, float **M)
{
  /* stuff that filtrar do */
  return M
}

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2012-12-14
    • 2022-11-16
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多