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;
}