Anny黄 发表于 2015-6-26 23:37:09

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

本帖最后由 Anny黄 于 2015-6-26 23:44 编辑

按着要求把代码写出来了,也实现了,但是照着上面视频抄下来的一个process中,那个f的参数为什么要个空括号,用处在哪,去掉后编译又不给过,这是为何?【该代码目的是实现:用户输入2个,值然后自动进行比较大小以及求和。要求用到指向函数的指针】直接上代码,求解惑#include<stdio.h>
void main()
{
        int max(int ,int );
        int min(int ,int );
        int add(int ,int );
        void process(int x,int y,int(*f)());
        int a,b;
       
       
        printf("请输入数字\n");
        scanf("%d %d",&a,&b);
        printf("\n");
        printf("max =");
        process(a,b,max);
        printf("\n");
       
        printf("min =");
        process(a,b,min);
        printf("\n");
       
        printf("add =");
        process(a,b,add);
        printf("\n");
}
int max(int a,int b )
{
        int c;
        if(a<b)
        {
                c=b;
        }
        else
        {
                c=a;
        }
        return c;
}
void process(int x,int y,int(*f)())
{
        int a;
        a=f(x,y);
        printf("%d",a);
}
int min(int a,int b)
{
        int c;
        if(a<b)
        {
                c=a;
        }
        else
        {
                c=b;
        }
        return(c);
}
int add(int a,int b )
{
        a+=b;
        return(a);
}

仰望天上的光 发表于 2015-6-26 23:37:10

Anny黄 发表于 2015-6-29 00:15
int (*f)()后面带个空括号是表明这个参数是函数吗!

1. int (*f)()后面带个括号,说明f这个指针指向的是函数
2. 后面带个空括号,说明这个函数没有输入参数

仰望天上的光 发表于 2015-6-26 23:53:16

本帖最后由 仰望天上的光 于 2015-6-26 23:55 编辑

f---定义f
*f---f是指针
(*f)()---f这个指针指向一个函数,该函数不带参数。为什么不写成*f()呢?因为这样写f会先和()结合,说明定义的是一个函数,而函数的返回值是指针
in(*f)(),f这个指针指向一个函数,该函数不带参数,且返回类型是int

小人 发表于 2015-6-27 08:51:35

#include<stdio.h>
void main()
{
       
        int max(int, int);
        int min(int, int);
        int add(int, int);
        void process(int x, int y, int(*f)(int, int));   //定义函数指针 需要与函数的参数和返回值一样
        int a, b;


        printf("请输入数字\n");
        scanf("%d %d", &a, &b);
        printf("\n");
        printf("max =");
        process(a, b, max);
        printf("\n");

        printf("min =");
        process(a, b, min);
        printf("\n");

        printf("add =");
        process(a, b, add);
        printf("\n");
}
int max(int a, int b)
{
        int c;
        if (a<b)
        {
                c = b;
        }
        else
        {
                c = a;
        }
        return c;
}
void process(int x, int y, int(*f)(int,int))//这里也是一样的
{
        int a;
        a = f(x, y);
        printf("%d", a);
}
int min(int a, int b)
{
        int c;
        if (a<b)
        {
                c = a;
        }
        else
        {
                c = b;
        }
        return(c);
}
int add(int a, int b)
{
        a += b;
        return(a);
}

{:9_240:} 正如楼上说的一样,我贴上代码给你看

Anny黄 发表于 2015-6-29 00:14:13

小人 发表于 2015-6-27 08:51
正如楼上说的一样,我贴上代码给你看

虽然还不明白in(*f)()后面带的那个空括号的意思是什么。不过辛苦你拉!{:9_240:}

Anny黄 发表于 2015-6-29 00:15:21

仰望天上的光 发表于 2015-6-26 23:53
f---定义f
*f---f是指针
(*f)()---f这个指针指向一个函数,该函数不带参数。为什么不写成*f()呢?因为这 ...

int (*f)()后面带个空括号是表明这个参数是函数吗!

xiongjingkui 发表于 2015-7-14 22:21:50

指针函数,表明这个指针指的是函数。

xiaohu168888 发表于 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()呢,

distooy 发表于 2016-1-16 23:29:24

貌似就是无参数的函数指针吧

xjy777777 发表于 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

xjy777777 发表于 2020-6-22 20:27:23

为什么输出是这
页: [1]
查看完整版本: 小甲鱼老师视频里面的一道题,做出来了但是有个小地方不明白!