c语言中如何将拥有相同参数的不同函数函数指针作为另一个函数的参数?

c语言中如何将拥有相同参数的不同函数函数指针作为另一个函数的参数?

代码:

#include <stdio.h>
#include <time.h>
#include <math.h>

#define MAXN 10

clock_t start,stop;
double duration;

void myfunction(double(*func)(int,double,double),double a[]);
double f1(int n,double a[],double x);
double f2(int n,double a[],double x);

int main()
{
    int i=0;
    double a[MAXN];
    for(i=0;i<MAXN;i++)
        a[i] = (double)i;

    myfunction(f1,a);
    myfunction(f2,a);
    return 0;
}

void myfunction(double (*func)(int,double,double),double a[])
{
    start = clock();
    func(MAXN-1,a,1.1);
    stop = clock();
    duration = ((double)(stop - start))/CLK_TCK;
    printf("ticks1 = %f\n",(double)(stop - start));
    printf("duretion = %6.2e\n",duration);

}

double f1(int n,double a[],double x)
{
    int i;
    double p = a[0];
    for(i=0;i<=n;i++)
        p += (a[i] * pow(x,i));
    return p;
}

double f2(int n,double a[],double x)
{
    int i;
    double p = a[n];
    for(i=n;i>0;i--)
        p = a[i-1] + x * p;
    return p;
}

出错信息:
warning C4028: formal parameter 2 different from declaration
warning C4024: 'myfunction' : different types for formal and actual parameter 1
warning C4028: formal parameter 2 different from declaration
warning C4024: 'myfunction' : different types for formal and actual parameter 1
error C2115: 'function' : incompatible types
warning C4024: 'func' : different types for formal and actual parameter 2

请问错误原因是什么?怎么改才好?谢谢了!

1个回答

#include <stdio.h>
#include <time.h>
#include <math.h>

#define MAXN 10

clock_t start,stop;
double duration;

void myfunction(double(*func)(int,double*,double),double* a);
double f1(int n,double *a,double x);
double f2(int n,double *a,double x);

int main()
{
    int i=0;
    double a[MAXN];
    for(i=0;i<MAXN;i++)
        a[i] = (double)i;

    myfunction(f1,a);
    myfunction(f2,a);
    return 0;
}

void myfunction(double (*func)(int,double*,double),double*a)
{
double CLK_TCK = 1;
    start = clock();
    func(MAXN-1,a,1.1);
    stop = clock();
    duration = ((double)(stop - start))/CLK_TCK;
    printf("ticks1 = %f\n",(double)(stop - start));
    printf("duretion = %6.2e\n",duration);

}

double f1(int n,double a[],double x)
{
    int i;
    double p = a[0];
    for(i=0;i<=n;i++)
        p += (a[i] * pow(x,i));
    return p;
}

double f2(int n,double a[],double x)
{
    int i;
    double p = a[n];
    for(i=n;i>0;i--)
        p = a[i-1] + x * p;
    return p;
}
qq_30420749
许贤生 好的,刚刚看了下,CLK_TCK是在头文件time.h下宏定义的符号常量,不需要定义:)
9 个月之前 回复
caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 回复许贤生: 那你是别的地方定义的 问题解决请点采纳
9 个月之前 回复
qq_30420749
许贤生 原来是这个原因,不过我运行还是报了个错,将“double CLK_TCK = 1;”这句删掉后就没问题了。非常感谢!!
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐