鱼C论坛

 找回密码
 立即注册
查看: 1284|回复: 4

[已解决]关于这个函数指针有一个小问题,希望大佬解答

[复制链接]
发表于 2019-12-5 12:57:39 | 显示全部楼层 |阅读模式
20鱼币
上次提问让大佬们见笑了,发帖少,对于遵循规范问题我这个帖子我也重新发一下。

#include<stdio.h>
float add(float, float);
float sub(float, float);
float mul(float, float);
float chu(float, float);//分别是加减乘除计算函数
float (*sellect(char op))(float, float);//挑选函数返回一个带两个float型整型参数的指针函数
float calc(float*fp(float,float),float ,float);//实现直接返回对应指针函数的计算

float add(float num1, float num2)
{
        return num1 + num2;
}

float sub(float num1, float num2)
{
        return num1 - num2;
}

float mul(float num1, float num2)
{
        return num1 * num2;
}

float chu(float num1, float num2)
{
        return num1 / num2;
}
float (*sellect(char op))(float, float)
{
        switch ('op')
        {
        case'+':return add;
        case'-':return sub;
        case'*':return mul;
        case'/':return chu;
        default: 
                return 0;
        }
}

float calc(float(* fp)(float, float), float num1, float num2)
{
        return (*fp)(num1, num2);//
}

int main(void)
{
        float num1, num2;
        char op;
        float(*fp)(float,float);//定义了一个带两个浮点型的函数指针
        printf("请输入+-*/的算法式例如(3+5)\n");
        scanf("%f%c%f",&num1,&op,&num2);//输入
        fp = sellect(op);//如果这里直接fp=add等几个函数都是可以运行的,但是使用这个却会爆出这样一个错误;跳出0x00000000 处(位于 Project1.exe 中)引发的异常: 0xC0000005: 执行位置 0x00000000 时发生访问冲突

        printf("%f%c%f=%f", num1, op, num2,(*fp)(num1,num2));
        return 0;
}


这个地方我有过很多次尝试了,依旧会出现问题,代码出自小甲鱼的带你学c带你飞中的139面的整形改为了浮点型并增加乘除。https://fishc.com.cn/thread-77586-1-4.html这个网页上也有关于小甲鱼的代码
有所错误望指正
最佳答案
2019-12-5 12:57:40
float (*sellect(char op))(float, float)
{
        switch ('op')            // 这里有问题,你仔细看一看,看看能不能看出是什么问题
        {
        case'+':return add;
        case'-':return sub;
        case'*':return mul;
        case'/':return chu;
        default: 
                return 0;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-5 12:57:40 | 显示全部楼层    本楼为最佳答案   
float (*sellect(char op))(float, float)
{
        switch ('op')            // 这里有问题,你仔细看一看,看看能不能看出是什么问题
        {
        case'+':return add;
        case'-':return sub;
        case'*':return mul;
        case'/':return chu;
        default: 
                return 0;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-5 13:05:40 | 显示全部楼层
希望能解释下我的那个的错误原因,我这个代码设计为能由用户自由输入并计算例如我输入3+5便显示3+5=8(这里我拿整形举个例子),输入3-5便显示3-5=-2,我在代码后面有补充,我直接复制fp=add是可以实现的,但是采用函数指针为返回值却出现问题,希望能解释下这个,您这个代码我是知道的,相当于我那个直接赋值,是可以运行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-5 13:11:21 | 显示全部楼层
编译器使用的是vs2019,win10平台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-5 13:21:11 | 显示全部楼层

哎呀,居然是这么个小问题,难怪直接给这个函数指针直接赋值没有问题,多谢了,解除了我好几天的疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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