ожидается ‘double *’, но аргумент имеет тип ‘double’ и несовместимый тип для аргумента 2/3/4/5 функции

Я прошу вашей помощи, ребята, я не лучший кодер, и я потратил на это столько времени, я так устал и подавлен: [

В основном я хочу передать intи 4 одномерных массива для функции, которая должна возвращать указатель на массив (вектор решения для моей цели), который я понял в C, я мог определить в функции через статический порядок.

В основном это говорит о том, что он не понимает, почему массив двойного типа передается функции, которая возвращает указатель на double, и по какой-то причине он ожидает, что указатель будет аргументом, как я понял.
и я думаю, что он перетянулся на жирную линию, потому что есть проблема совместимости, по крайней мере, я думаю, что это причина этой ошибки.
Пожалуйста, помогите мне, ребята:]

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

1

Решение

Ваш вызов функции неверен.

если у вас есть массив int a[N]; и функция void func(int a[]) вам нужно вызвать функцию как func(a);,

В своем вызове вы передаете N-й элемент массива a[N]следовательно, ошибка компиляции, так как она имеет тип double и не double *, (Это также вне доступа)

Правильный вызов функции будет:

p=thomas_algorithm(n, c, b, a, d);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]