鱼C论坛

 找回密码
 立即注册
查看: 2984|回复: 7

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

[复制链接]
发表于 2018-1-29 13:10:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-29 13:11:30 | 显示全部楼层
求问这个程序到底哪里出了错,编译可以通过,运行却出现问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 13:16:16 | 显示全部楼层
题目描述清楚,出现什么问题,提交代码用恢复框的<>工具提交
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 13:25:02 | 显示全部楼层
没看到你的process函数的定义在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
        
}
这是用函数指针做参数,如果要用指针函数做参数,就得先声明指针函数,定义指针函数,不赞同这样的做法的,我也是新人
多想一想,试一试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 19:26:03 | 显示全部楼层
Process 函数的定义哪去了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 19:27:20 | 显示全部楼层
本帖最后由 musilintan 于 2018-1-29 19:29 编辑

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

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

函数指针这样用:
1.定义函数指针
2.然后给函数指针赋值,指向一个函数。
3.然后可以使用函数指针直接代替指向函数。一般用来做回调函数用的。参数传递一个函数指针进去,然后执行完调用函数指针回调。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 09:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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