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

鲍鱼

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

只要我只需要函数返回的值,函数指针就可以工作,但当我尝试调用具有函数指针作为另一个函数内部参数的函数时则不然。

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

我在第 31、47、50 行出现错误(*funct)

错误:“double”类型的参数与“double (*)(double x, data parameters)”类型的参数不兼容。

0______

这里有一个例子:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Python中不使用括号的情况下调用具有参数的函数

来自分类Dev

调用具有TypeAlias作为参数的函数?

来自分类Dev

如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

来自分类Dev

如何在C#中P /调用具有未知结构的函数?

来自分类Dev

如何在C#中P /调用具有未知结构的函数?

来自分类Dev

C ++如何使用具有超类指针的子类调用函数

来自分类Dev

如何调用具有for_each循环参数的函数?

来自分类Dev

在Python中调用具有参考参数的.Net函数

来自分类Dev

从JavaScript中的对象调用具有正确参数的函数

来自分类Dev

在 Sinon 中假调用具有特定参数的函数

来自分类Dev

调用具有较少参数的C函数?

来自分类Dev

调用具有较少参数的C函数?

来自分类Dev

如何在php中调用具有相同div名称的脚本函数?

来自分类Dev

从C ++ 17中的另一个构造函数调用具有不同参数类型的构造函数

来自分类Dev

如何在C中使用结构指针作为参数调用void函数?

来自分类Dev

在C ++中如何从不同的库调用具有相同签名的dll函数?

来自分类Dev

如何从类似的函数调用具有可变数量的参数的函数?

来自分类Dev

如何传递具有参数作为另一个函数的参数的函数指针?

来自分类Dev

具有void * a和指针函数作为参数的函数

来自分类Dev

Haskell使用map调用具有多个参数的函数

来自分类Dev

调用具有多个参数值的模板函数

来自分类Dev

调用具有不同数量参数的函数

来自分类Dev

调用具有多个数组参数的函数

来自分类Dev

如何从Java中的Main类的函数调用具有某种返回类型的函数?

来自分类Dev

指针作为C中的函数参数

来自分类Dev

C ++函数指针作为Doxygen中的参数

来自分类Dev

指针数组作为c函数中的参数

来自分类Dev

如何调用具有相同名称但不同参数的虚函数?

来自分类Dev

如何多次调用具有不同参数的函数成员?

Related 相关文章

  1. 1

    如何在Python中不使用括号的情况下调用具有参数的函数

  2. 2

    调用具有TypeAlias作为参数的函数?

  3. 3

    如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

  4. 4

    如何在C#中P /调用具有未知结构的函数?

  5. 5

    如何在C#中P /调用具有未知结构的函数?

  6. 6

    C ++如何使用具有超类指针的子类调用函数

  7. 7

    如何调用具有for_each循环参数的函数?

  8. 8

    在Python中调用具有参考参数的.Net函数

  9. 9

    从JavaScript中的对象调用具有正确参数的函数

  10. 10

    在 Sinon 中假调用具有特定参数的函数

  11. 11

    调用具有较少参数的C函数?

  12. 12

    调用具有较少参数的C函数?

  13. 13

    如何在php中调用具有相同div名称的脚本函数?

  14. 14

    从C ++ 17中的另一个构造函数调用具有不同参数类型的构造函数

  15. 15

    如何在C中使用结构指针作为参数调用void函数?

  16. 16

    在C ++中如何从不同的库调用具有相同签名的dll函数?

  17. 17

    如何从类似的函数调用具有可变数量的参数的函数?

  18. 18

    如何传递具有参数作为另一个函数的参数的函数指针?

  19. 19

    具有void * a和指针函数作为参数的函数

  20. 20

    Haskell使用map调用具有多个参数的函数

  21. 21

    调用具有多个参数值的模板函数

  22. 22

    调用具有不同数量参数的函数

  23. 23

    调用具有多个数组参数的函数

  24. 24

    如何从Java中的Main类的函数调用具有某种返回类型的函数?

  25. 25

    指针作为C中的函数参数

  26. 26

    C ++函数指针作为Doxygen中的参数

  27. 27

    指针数组作为c函数中的参数

  28. 28

    如何调用具有相同名称但不同参数的虚函数?

  29. 29

    如何多次调用具有不同参数的函数成员?

热门标签

归档