鱼C论坛

 找回密码
 立即注册
查看: 1082|回复: 9

[已解决]求助,指向函数的指针作函数参数

[复制链接]
发表于 2020-8-5 21:19:24 | 显示全部楼层 |阅读模式
10鱼币
看旧版小甲鱼老师的视频47,最后那个程序用的DEV C++写的,但总是报错
#include <stdio.h>

int main()
{
        int max(int, int);
        int min(int, int);
        int add(int, int);
       
        void process(int x, int y, int(*fun)());
       
        int a, b;
        printf("Enter a and b: ");
        scanf("%d, %d", &a, &b);
       
        printf("max = ");
        process(a, b, max);
       
        printf("min = ");
        process(a, b, min);
       
        printf("sum = ");
        process(a, b, add);
}

int max(int x, int y)
{
        int z;
        if(x > y)
        {
                z = x;
        }
        else
        {
                z = y;
        }
        return z;
}

int min(int x, int y)
{
        int z;
        if(x < y)
        {
                z = x;
        }
        else
        {
                z = y;
        }
        return z;
}

int add(int x, int y)
{
        int z;
        z = x + y;
    return z;
}

总是这个错误    [Error] invalid conversion from 'int (*)(int, int)' to 'int' [-fpermissive]
有人说 不匹配或者数据分配空间,但是我这个菜鸟不太懂
希望大佬指教
最佳答案
2020-8-5 21:19:25
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int max(int, int);
  5.     int min(int, int);
  6.         int add(int, int);
  7.          
  8.         void process(int x, int y, int(*fun)(int, int));
  9.        
  10.         int a, b;
  11.         printf("Enter a and b: ");
  12.         scanf("%d %d", &a, &b);
  13.          
  14.         printf("max = ");
  15.         process(a, b,max);
  16.          
  17.         printf("min = ");
  18.         process(a, b,min);
  19.          
  20.         printf("sum = ");
  21.         process(a, b, add);
  22.        
  23.         return 0;
  24. }

  25. int max(int x, int y)
  26. {
  27.     int z;
  28.     if(x > y)
  29.     {
  30.         z = x;
  31.     }
  32.     else
  33.     {
  34.             z = y;
  35.     }
  36.     return z;
  37. }

  38. int min(int x, int y)
  39. {
  40.         int z;
  41.         if(x < y)
  42.         {
  43.                 z = x;
  44.         }
  45.         else
  46.         {
  47.                 z = y;
  48.         }
  49.         return z;
  50. }

  51. int add(int x, int y)
  52. {
  53.     int z;
  54.     z = x + y;
  55.     return z;
  56. }
  57. void process(int x, int y, int(*fun)(int, int))
  58. {
  59.         printf("%d\n",fun(x,y));
  60.         return ;
  61. }
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 21:19:25 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int max(int, int);
  5.     int min(int, int);
  6.         int add(int, int);
  7.          
  8.         void process(int x, int y, int(*fun)(int, int));
  9.        
  10.         int a, b;
  11.         printf("Enter a and b: ");
  12.         scanf("%d %d", &a, &b);
  13.          
  14.         printf("max = ");
  15.         process(a, b,max);
  16.          
  17.         printf("min = ");
  18.         process(a, b,min);
  19.          
  20.         printf("sum = ");
  21.         process(a, b, add);
  22.        
  23.         return 0;
  24. }

  25. int max(int x, int y)
  26. {
  27.     int z;
  28.     if(x > y)
  29.     {
  30.         z = x;
  31.     }
  32.     else
  33.     {
  34.             z = y;
  35.     }
  36.     return z;
  37. }

  38. int min(int x, int y)
  39. {
  40.         int z;
  41.         if(x < y)
  42.         {
  43.                 z = x;
  44.         }
  45.         else
  46.         {
  47.                 z = y;
  48.         }
  49.         return z;
  50. }

  51. int add(int x, int y)
  52. {
  53.     int z;
  54.     z = x + y;
  55.     return z;
  56. }
  57. void process(int x, int y, int(*fun)(int, int))
  58. {
  59.         printf("%d\n",fun(x,y));
  60.         return ;
  61. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 21:26:46 From FishC Mobile | 显示全部楼层
试试把void process(int x, int y, int(*fun)());
改成 void process(int x, int y, int(*fun)(int, int));
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 21:29:02 | 显示全部楼层
本帖最后由 baige 于 2020-8-5 22:00 编辑

。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 22:23:50 | 显示全部楼层
我服了,被scanf()里面的逗号坑了,我还以为我哪里写错了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-5 22:26:19 | 显示全部楼层

是最后一步忘了调用process 函数了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 22:28:02 | 显示全部楼层
改成 void process(int x, int y, int(*fun)(int, int));
然后把这个函数实现
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 22:28:37 | 显示全部楼层
实现部分
  1. void process(int x, int y, int(*fun)(int, int))
  2. {
  3.         printf("%d\n",fun(x,y));
  4. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 22:31:12 | 显示全部楼层
可以的话给个最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-5 22:37:35 | 显示全部楼层
baige 发表于 2020-8-5 22:31
可以的话给个最佳

弄好了,谢谢大佬,最佳安排上
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表