许贤生 2020-02-06 06:56 采纳率: 100%
浏览 421
已采纳

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条回答 默认 最新

  • threenewbee 2020-02-06 07:12
    关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 如何解除Uniaccess管控
  • ¥15 微信小程序跳转关联公众号
  • ¥15 Java AES 算法 加密采用24位向量报错如何处理?
  • ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄
  • ¥45 字符串操作——数组越界问题
  • ¥15 Loss下降到0.08时不在下降调整学习率也没用
  • ¥15 QT+FFmpeg使用GPU加速解码
  • ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?
  • ¥15 来个会搭建付费网站的有偿
  • ¥100 有能够实现人机模式的c/c++代码,有图片背景等,能够直接进行游戏