鱼C论坛

 找回密码
 立即注册
查看: 2777|回复: 10

小甲鱼老师视频里面的一道题,做出来了但是有个小地方不明白!

[复制链接]
发表于 2015-6-26 23:37:09 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 Anny黄 于 2015-6-26 23:44 编辑

按着要求把代码写出来了,也实现了,但是照着上面视频抄下来的一个process中,那个f的参数为什么要个空括号,用处在哪,去掉后编译又不给过,这是为何?【该代码目的是实现:用户输入2个,值然后自动进行比较大小以及求和。要求用到指向函数的指针】直接上代码,求解惑
  1. #include<stdio.h>
  2. void main()
  3. {
  4.         int max(int ,int );
  5.         int min(int ,int );
  6.         int add(int ,int );
  7.         void process(int x,int y,int(*f)());
  8.         int a,b;
  9.        
  10.        
  11.         printf("请输入数字\n");
  12.         scanf("%d %d",&a,&b);
  13.         printf("\n");
  14.         printf("max =");
  15.         process(a,b,max);
  16.         printf("\n");
  17.        
  18.         printf("min =");
  19.         process(a,b,min);
  20.         printf("\n");
  21.        
  22.         printf("add =");
  23.         process(a,b,add);
  24.         printf("\n");
  25. }
  26. int max(int a,int b )
  27. {
  28.         int c;
  29.         if(a<b)
  30.         {
  31.                 c=b;
  32.         }
  33.         else
  34.         {
  35.                 c=a;
  36.         }
  37.         return c;
  38. }
  39. void process(int x,int y,int(*f)())
  40. {
  41.         int a;
  42.         a=f(x,y);
  43.         printf("%d",a);
  44. }
  45. int min(int a,int b)
  46. {
  47.         int c;
  48.         if(a<b)
  49.         {
  50.                 c=a;
  51.         }
  52.         else
  53.         {
  54.                 c=b;
  55.         }
  56.         return(c);
  57. }
  58. int add(int a,int b )
  59. {
  60.         a+=b;
  61.         return(a);
  62. }
复制代码

最佳答案

查看完整内容

1. int (*f)()后面带个括号,说明f这个指针指向的是函数 2. 后面带个空括号,说明这个函数没有输入参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-26 23:37:10 | 显示全部楼层
Anny黄 发表于 2015-6-29 00:15
int (*f)()后面带个空括号是表明这个参数是函数吗!

1. int (*f)()后面带个括号,说明f这个指针指向的是函数
2. 后面带个空括号,说明这个函数没有输入参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-26 23:53:16 | 显示全部楼层
本帖最后由 仰望天上的光 于 2015-6-26 23:55 编辑

f---定义f
*f---f是指针
(*f)()---f这个指针指向一个函数,该函数不带参数。为什么不写成*f()呢?因为这样写f会先和()结合,说明定义的是一个函数,而函数的返回值是指针
in(*f)(),f这个指针指向一个函数,该函数不带参数,且返回类型是int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-27 08:51:35 | 显示全部楼层
  1. #include<stdio.h>
  2. void main()
  3. {
  4.        
  5.         int max(int, int);
  6.         int min(int, int);
  7.         int add(int, int);
  8.         void process(int x, int y, int(*f)(int, int));   //定义函数指针 需要与函数的参数和返回值一样
  9.         int a, b;


  10.         printf("请输入数字\n");
  11.         scanf("%d %d", &a, &b);
  12.         printf("\n");
  13.         printf("max =");
  14.         process(a, b, max);
  15.         printf("\n");

  16.         printf("min =");
  17.         process(a, b, min);
  18.         printf("\n");

  19.         printf("add =");
  20.         process(a, b, add);
  21.         printf("\n");
  22. }
  23. int max(int a, int b)
  24. {
  25.         int c;
  26.         if (a<b)
  27.         {
  28.                 c = b;
  29.         }
  30.         else
  31.         {
  32.                 c = a;
  33.         }
  34.         return c;
  35. }
  36. void process(int x, int y, int(*f)(int,int))//这里也是一样的
  37. {
  38.         int a;
  39.         a = f(x, y);
  40.         printf("%d", a);
  41. }
  42. int min(int a, int b)
  43. {
  44.         int c;
  45.         if (a<b)
  46.         {
  47.                 c = a;
  48.         }
  49.         else
  50.         {
  51.                 c = b;
  52.         }
  53.         return(c);
  54. }
  55. int add(int a, int b)
  56. {
  57.         a += b;
  58.         return(a);
  59. }
复制代码

正如楼上说的一样  ,我贴上代码给你看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-29 00:14:13 | 显示全部楼层
小人 发表于 2015-6-27 08:51
正如楼上说的一样  ,我贴上代码给你看

虽然还不明白in(*f)()后面带的那个空括号的意思是什么。不过辛苦你拉!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-29 00:15:21 | 显示全部楼层
仰望天上的光 发表于 2015-6-26 23:53
f---定义f
*f---f是指针
(*f)()---f这个指针指向一个函数,该函数不带参数。为什么不写成*f()呢?因为这 ...

int (*f)()后面带个空括号是表明这个参数是函数吗!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-14 22:21:50 | 显示全部楼层
指针函数,表明这个指针指的是函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-15 23:03:13 | 显示全部楼层
仰望天上的光 发表于 2015-6-26 23:53
f---定义f
*f---f是指针
(*f)()---f这个指针指向一个函数,该函数不带参数。为什么不写成*f()呢?因为这 ...

#include<stdio.h>
int max(int ,int );
int min(int ,int );
int add(int ,int );
function(int ,int ,int fun());

void main()
{
      int a,b;
      printf("enter a and b:");
      scanf("%d %d",&a,&b);

      printf("max =");
      function(a,b,max);

      printf("min = ");
      function(a,b,min);

      printf("add = ");
      function(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 = y;     
      }
      else
      {
            z = x;
      }
      return z;
}

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

function(int x,int y,int fun())
{
      int a;
      a = fun(x,y);
      printf("%d",a);
}

为什么我这样也可以定义那个指针函数呢,结果也是对的呢,那个int (*f)()为什么不直接写成函数f()呢,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 23:29:24 | 显示全部楼层
貌似就是无参数的函数指针吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-22 20:26:24 | 显示全部楼层
C:\Users\Administrator\CLionProjects\67swappointer\cmake-build-debug\67swappointer.exe
Enter a and b:2 3
max=d
min=d
add=d

进程已结束,退出代码 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-22 20:27:23 | 显示全部楼层
为什么输出是这
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 22:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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