迎风一刀倒 发表于 2018-1-29 13:10:32

新手求助大神函数指针的正确用法

#include <stdio.h>

void main()
{
        int Max(int,int);
        int Min(int,int);
        int Add(int,int);

    void Process(int x,int y,int(*fun)(int,int));

        int a,b;
        printf("Please input a and b:\n");
        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 max;
        max=x;
        if(max<y)
        {
                max=y;
        }

        return max;
}

int Min(int x,int y)
{
        int min;
        min=x;
        if(min>y)
        {
                min=y;
        }

        return min;
}

int Add(int x,int y)
{
        int sum;
        sum=x+y;

        return sum;
}

迎风一刀倒 发表于 2018-1-29 13:11:30

求问这个程序到底哪里出了错,编译可以通过,运行却出现问题

orino 发表于 2018-1-29 13:16:16

题目描述清楚,出现什么问题,提交代码用恢复框的<>工具提交

BngThea 发表于 2018-1-29 13:25:02

没看到你的process函数的定义在哪里

waitforlove 发表于 2018-1-29 15:52:47

#include <stdio.h>

int Max(int,int);
int Min(int,int);
int Add(int,int);
int Process(int *fun(int,int),int a,int b);

int Process(int *fun(int,int),int a,int b)
{

        if(fun==Max)
        {
                return Max(a,b);
        }
        else if(fun==Min)
        {
                return Min(a,b);
        }
        else
        {
                return Add(a,b);
        }
}

int Max(int x,int y)
{
      int max;
      max=x;
      if(max<y)
      {
                max=y;
      }

      return max;
}

int Min(int x,int y)
{
      int min;
      min=x;
      if(min>y)
      {
                min=y;
      }

      return min;
}

int Add(int x,int y)
{
      int sum;
      sum=x+y;

      return sum;
}

void main()
{
      int a,b;
      printf("Please input a and b:\n");
      scanf("%d%d",&a,&b);
      printf("Max=%d\n",Process(Max,a,b));
      printf("Min=%d\n",Process(Min,a,b));
      printf("Sum=%d\n",Process(Add,a,b));
                return;
      
}
这是用函数指针做参数,如果要用指针函数做参数,就得先声明指针函数,定义指针函数,不赞同这样的做法的,我也是新人
多想一想,试一试{:5_91:}

迎风一刀倒 发表于 2018-1-29 17:08:43

orino 发表于 2018-1-29 13:16
题目描述清楚,出现什么问题,提交代码用恢复框的工具提交

unresolved external symbol "void __cdecl Process(int,int,int (__cdecl*)(int,int))" (?Process@@YAXHHP6AHHH@Z@Z)

musilintan 发表于 2018-1-29 19:26:03

Process 函数的定义哪去了。。。

musilintan 发表于 2018-1-29 19:27:20

本帖最后由 musilintan 于 2018-1-29 19:29 编辑

int (*f) (int x); /*声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

函数指针这样用:
1.定义函数指针
2.然后给函数指针赋值,指向一个函数。
3.然后可以使用函数指针直接代替指向函数。一般用来做回调函数用的。参数传递一个函数指针进去,然后执行完调用函数指针回调。
页: [1]
查看完整版本: 新手求助大神函数指针的正确用法