应为 'double *' 但参数的类型为 'double' 并且函数的参数 2/3/4/5 的类型不兼容
expected 'double *' but argument is of type 'double' and incompatible type for argument 2/3/4/5 of function
我恳求你们的帮助,我不是最好的编码员,我在这上面花了很多时间,我很累很沮丧:[
基本上我想将一个 int
和 4 个一维数组传递给一个函数,该函数应 return 一个指向数组的指针(我在 C 中理解的解向量)我可以通过静态命令在函数中定义。
基本上它说它不理解为什么将双精度类型数组传递给 return 指向双精度的指针的函数,并且出于某种原因它期望指针作为参数以及我明白了。
而且我认为它拖到了粗体线,因为存在兼容性问题,至少我认为这就是该错误的原因。
请大家帮帮我:]
#include <stdio.h>
#define N 4
double* thomas_algorithm(int n, double c[], double b[], double a[], double
d[]);
int main()
{
int i, n;
double* p;
double a[N-1]={0}, b[N]={0}, c[N-1]={0}, d[N]={0};
printf("please enter the order of the coefficient matrix:\n");
scanf("%d", &n);
printf("please insert the vector c:\n");
for(i=0; i<N-1; i++)
{
scanf("%lf", &c[i]);
}
printf("please insert the vector b:\n");
for(i=0; i<N; i++)
{
scanf("%lf", &b[i]);
}
printf("please insert the vector a:\n");
for(i=0; i<N-1; i++)
{
scanf("%lf", &a[i]);
}
printf("please insert the vector d:\n");
for(i=0; i<N; i++)
{
scanf("%lf", &d[i]);
}
**p=thomas_algorithm(n, c[N-1], b[N], a[N-1], d[N]);**
for(i=0; i<N; i++)
{
printf("x(%d)=%f", i+1, p+i);
}
return 0;
}
double* thomas_algorithm(int n, double c[], double b[], double a[], double
d[]) {
int i;
static double x[N]={0};
for(i=1; i<n-1; i++) /*factorization phase*/
{
b[i]=b[i]-(a[i]/b[i-1])*c[i-1];
d[i]=d[i]-(a[i]/b[i-1])*d[i-1];
}
/*backward substitution*/
x[N-1]=d[N-1]/b[N-1];
for(i=n-2; i>-1; i++)
{
x[i]=(d[i]-c[i]*x[i+1])/b[i];
}
return x;
}
你的函数调用错误。
如果你有一个数组 int a[N];
和一个函数 void func(int a[])
你需要像 func(a);
.
这样调用函数
在您的调用中,您传递了数组 a[N]
的第 N 个元素,因此编译错误,因为它是 double
而不是 double *
类型。 (也是越界访问)
正确的函数调用应该是:
p=thomas_algorithm(n, c, b, a, d);
我恳求你们的帮助,我不是最好的编码员,我在这上面花了很多时间,我很累很沮丧:[
基本上我想将一个 int
和 4 个一维数组传递给一个函数,该函数应 return 一个指向数组的指针(我在 C 中理解的解向量)我可以通过静态命令在函数中定义。
基本上它说它不理解为什么将双精度类型数组传递给 return 指向双精度的指针的函数,并且出于某种原因它期望指针作为参数以及我明白了。 而且我认为它拖到了粗体线,因为存在兼容性问题,至少我认为这就是该错误的原因。 请大家帮帮我:]
#include <stdio.h>
#define N 4
double* thomas_algorithm(int n, double c[], double b[], double a[], double
d[]);
int main()
{
int i, n;
double* p;
double a[N-1]={0}, b[N]={0}, c[N-1]={0}, d[N]={0};
printf("please enter the order of the coefficient matrix:\n");
scanf("%d", &n);
printf("please insert the vector c:\n");
for(i=0; i<N-1; i++)
{
scanf("%lf", &c[i]);
}
printf("please insert the vector b:\n");
for(i=0; i<N; i++)
{
scanf("%lf", &b[i]);
}
printf("please insert the vector a:\n");
for(i=0; i<N-1; i++)
{
scanf("%lf", &a[i]);
}
printf("please insert the vector d:\n");
for(i=0; i<N; i++)
{
scanf("%lf", &d[i]);
}
**p=thomas_algorithm(n, c[N-1], b[N], a[N-1], d[N]);**
for(i=0; i<N; i++)
{
printf("x(%d)=%f", i+1, p+i);
}
return 0;
}
double* thomas_algorithm(int n, double c[], double b[], double a[], double
d[]) {
int i;
static double x[N]={0};
for(i=1; i<n-1; i++) /*factorization phase*/
{
b[i]=b[i]-(a[i]/b[i-1])*c[i-1];
d[i]=d[i]-(a[i]/b[i-1])*d[i-1];
}
/*backward substitution*/
x[N-1]=d[N-1]/b[N-1];
for(i=n-2; i>-1; i++)
{
x[i]=(d[i]-c[i]*x[i+1])/b[i];
}
return x;
}
你的函数调用错误。
如果你有一个数组 int a[N];
和一个函数 void func(int a[])
你需要像 func(a);
.
在您的调用中,您传递了数组 a[N]
的第 N 个元素,因此编译错误,因为它是 double
而不是 double *
类型。 (也是越界访问)
正确的函数调用应该是:
p=thomas_algorithm(n, c, b, a, d);