二分法求方程的根的疑问

#include
#include
#include
#include
using namespace std;
double a(double x)
{
    return 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
}
double b(double x1, double x2, double(*c)(double))
{
    double d;
    do
    {
        d = (x1 + x2) / 2;
        if ((*c)(d) * (*c)(x1) > 0)
            x1 = d;
        else
            x2 = d;
    } while ((*c)(d) >= 1e-6);
    return d;
}
int main(void)
{
    double x1, x2;
    double a(double);
    double b(double, double, double);
    double(*c)(double);
    c = a;
    do 
    {
        scanf_s("%lf,%lf", &x1, &x2);
    } 
    while ((*c)(x1) * (*c)(x2) > 0);
    printf("%lf",b(x1,x2,*c));
    return 0;

为什么*c有问题;而且我把b函数删了就没有问题,为什么;为什么我可以删b函数不可以删a函数?

b函数第三个参数是double类型,但你实际调用b函数却用 * c作为参数?
main中b函数的申明,和前面的b函数定义中的第三个参数是不一样的啊
修改main函数中的b函数声明为:
double b(double, double, double(*c)(double));

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
double a(double x)
{
    return 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
}
double b(double x1, double x2, double(*c)(double))
{
    double d;
    do
    {
        d = (x1 + x2) / 2;
        if ((*c)(d) * (*c)(x1) > 0)
            x1 = d;
        else
            x2 = d;
    } while ((*c)(d) >= 1e-6);
    return d;
}
int main(void)
{
    double x1, x2;
    double a(double);
    double b(double, double,  double(*c)(double));
    double(*c)(double);
    c = a;
    do 
    {
        scanf_s("%lf,%lf", &x1, &x2);
    } 
    while ((*c)(x1) * (*c)(x2) > 0);
    printf("%lf",b(x1,x2,*c));
    return 0;
 
}

b传参把 *c 的星号去掉

b传参时c 前面的星号要去掉