недопустимый аргумент типа унарного '*' (есть 'double') - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь понять C указатели. Я попробовал этот простой код:

double der(double a)
{
    //printf("Value of a is %d\n", a);
    return (cos(a+eps)-cos(a-eps))/(2*eps);
}

void EX5(){

    double x;
    double (*fun_pointer)(double) = &der;
    printf ("saisir un point ");
    scanf ("%lf",&x);
    printf ("cos reel = %lf \n", cos(x));
    printf ("cos approximatif = %lf", der(x));
    double *r;
    r=*(fun_pointer)(x);
    printf ("cos approximatif = %lf", r);

}

Но я получаю

invalid type argument of unary ‘*’ (have 'double') 

Где я делаю неправильно, пожалуйста?

1 Ответ

0 голосов
/ 18 марта 2020

Должно быть так:

    double r;
    r = fun_pointer(x);

Функция возвращает double, а не double*, поэтому вам не нужно разыменовывать ее.

Это не нужно чтобы разыменовать указатель на функцию при вызове, это делается автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...