C语言中的指针矩阵

C语言中的指针矩阵,c,pointers,matrix,parameters,C,Pointers,Matrix,Parameters,我正在尝试执行以下代码 static double** updateA(double f_x0,double f_x1,double f_x2){ double a[3][3] = {{f_x0*f_x0, f_x0, 1},{f_x1*f_x1, f_x1, 1},{f_x2*f_x2, f_x2, 1}}; return a; } static double** updateAc (double f_x0,double f_x1,double f_x2, double x0

我正在尝试执行以下代码

static double** updateA(double f_x0,double f_x1,double f_x2){
    double a[3][3] = {{f_x0*f_x0, f_x0, 1},{f_x1*f_x1, f_x1, 1},{f_x2*f_x2, f_x2, 1}};

    return a;
}
static double** updateAc (double f_x0,double f_x1,double f_x2, double x0,double x1,double x2){
    double ac[3][3] = {{f_x0*f_x0, f_x0, x0},{f_x1*f_x1, f_x1, x1},{f_x2*f_x2, f_x2, x2}};
    return ac;
}

static double det3x3 (double** a){
    return (a[0][0]*((a[1][1]*a[2][2]) - (a[2][1]*a[1][2])) - a[0][1]*(a[1][0]
   * a[2][2] - a[2][0]*a[1][2]) + a[0][2]*(a[1][0]*a[2][1] - a[2][0]*a[1][1]));
}

static double newx2 (double f_x0,double f_x1,double f_x2, double x0,double x1,double x2){
    double **ac = updateAc(f_x0, f_x1, f_x2, x0, x1, x2);
    double **a = updateA(f_x0, f_x1, f_x2);
    double c = det3x3(ac)/det3x3(a);

    return c;
}
但它不工作,编译时会出现以下警告:

从返回“double[3][3]”的不兼容指针类型 结果类型为“double**”的函数

但是当我尝试执行代码时,它不起作用。我使用gcc作为编译器

有人能帮我吗

提前谢谢大家,

Lucas

这是结构方法

  • 仅适用于固定尺寸(本例中为3*3)
  • 尺寸是硬编码的
  • 调用方(在本例中为
    main()
    分配并传递指针

#包括
结构九{
双数据[3][3];
};
void do_it(结构九*p)
{
p->data[0][0]=0.0;
// ..
}
内部主(空)
{
结构九this9={{{1,2,3},{4,5,6},{7,8,9}};
做到这一点(&this9);
printf(“%lf\n”,this9.data[0][0]);
返回0;
}

<代码>执行此代码将由于缺少一个主()函数而失败。考虑创建一个.<代码>返回A;< /Code >。您正在对一个自动的(“Stase*”)变量进行指针回调。这里有一个主体,但它与问题无关,一旦所有其他的工作,问题就在从NeX2到DeT3x3发送的参数之间。(从updateA和updateAc收到)@wildplasser是的,它与编译器消息一致,但正确的做法是什么?最简单的方法是让调用者分配,并通过指针传递矩阵参数。(顺便说一句,这也允许编译器内联完整的函数)请注意:此问题还有其他解决方案。
#include <stdio.h>

struct nine {
        double data[3][3];
        };

void do_it(struct nine *p)
{
p->data[0][0] = 0.0;
// ..
}

int main(void)
{
struct nine this9 = {{{1,2,3},{4,5,6},{7,8,9}}};

do_it( &this9 );
printf("%lf\n", this9.data[0][0] );

return 0;
}