在C语言中,如何调用具有函数指针作为参数的函数?

在C语言中,如何调用具有函数指针作为参数的函数?,c,function-pointers,C,Function Pointers,我正在写一个程序,用牛顿法求解一个方程。我需要使用函数指针,以便在需要时可以快速替换方程 只要我只需要函数返回的值,函数指针就可以工作,但当我试图调用另一个函数中包含函数指针作为参数的函数时,函数指针就不能工作 #define _CRT_SECURE_NO_WARNINGS #define M_PI 3.14159265358979323846 #define N 2 #include <stdio.h> #include <math.h> struct data{

我正在写一个程序,用牛顿法求解一个方程。我需要使用函数指针,以便在需要时可以快速替换方程

只要我只需要函数返回的值,函数指针就可以工作,但当我试图调用另一个函数中包含函数指针作为参数的函数时,函数指针就不能工作

#define _CRT_SECURE_NO_WARNINGS
#define M_PI 3.14159265358979323846
#define N 2
#include <stdio.h>
#include <math.h>

struct data{
    double theta;
    double gamma;
    double M;
    double epsilon;
    double dx;
};

double funct(double, data);
double derivative(double, data, double(*f)(double, data));
double MST(double, data, double(*f)(double, data));

void main(){
    double results[N];
    data parameters;
    parameters.gamma = 1.4, parameters.epsilon = 0.001;
    printf("Podaj parametry:\nTheta = ");
    scanf("%lf", &parameters.theta);
    printf("M = ");
    scanf("%lf", &parameters.M);

    int index = 0;
    for (int x = 0; x < M_PI / 2.; x++){
        if (funct(x, parameters)*funct(x + 1, parameters) < 0){
            results[index] = MST(x, parameters, (*funct)(x, parameters));
            index++;
        }
    }
}

double funct(double sigma, data parameters){
    return 2. / ((parameters.gamma + 1)*parameters.M*parameters.M*sin(sigma)*sin(sigma)) - tan(sigma - parameters.theta) / tan(sigma) + (parameters.gamma - 1) / (parameters.gamma + 1);
}

double derivative(double x, data parameters, double (*f)(double x, data parameters)){
    double dx = 0.0001;
    return (f(x + dx, parameters) - f(x, parameters)) / dx;
}

double MST(double sigma_0, data parameters, double(*funct)(double sigma, data parameters)){
    double sigma_1 = sigma_0 - funct(sigma_0, parameters) / derivative(sigma_0, parameters, (*funct)(sigma_0, parameters));
    while (fabs(sigma_1 - sigma_0) < parameters.epsilon){
        sigma_0 = sigma_1;
        sigma_1 = sigma_0 - funct(sigma_0, parameters) / derivative(sigma_0, parameters, (*funct)(sigma_0, parameters));
    }
    return sigma_1;
}
在*funct的第31、47、50行中出现错误

错误:中类型为double的参数与类型为double*double x的参数数据参数不兼容


这里有一个例子:

#include <stdio.h>

int function1(int x)
{
    return x + x;
}

int function2(int x)
{
    return x * x;
}

int function3(int x)
{
    int result = 1;
    for(int i = 1; i <= x; i++)
        result *= i;
    return result;
}

int ffunction(int (*f)(int), int arg)
{
    return f(arg);
}

int main()
{
    printf("Function1 call %d\n", ffunction(function1, 5));
    printf("Function2 call %d\n", ffunction(function2, 5));
    printf("Function3 call %d\n", ffunction(function3, 5));

    return 0;
}

只需传递函数名no*,无参数,无参数-MSTx,parameters,funct;main返回int,而不是void。这些都没有帮助,仍然得到sam错误