鱼C论坛

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

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

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


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

  8. float add(float num1, float num2)
  9. {
  10.         return num1 + num2;
  11. }

  12. float sub(float num1, float num2)
  13. {
  14.         return num1 - num2;
  15. }

  16. float mul(float num1, float num2)
  17. {
  18.         return num1 * num2;
  19. }

  20. float chu(float num1, float num2)
  21. {
  22.         return num1 / num2;
  23. }
  24. float (*sellect(char op))(float, float)
  25. {
  26.         switch ('op')
  27.         {
  28.         case'+':return add;
  29.         case'-':return sub;
  30.         case'*':return mul;
  31.         case'/':return chu;
  32.         default:
  33.                 return 0;
  34.         }
  35. }

  36. float calc(float(* fp)(float, float), float num1, float num2)
  37. {
  38.         return (*fp)(num1, num2);//
  39. }

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

  48.         printf("%f%c%f=%f", num1, op, num2,(*fp)(num1,num2));
  49.         return 0;
  50. }
复制代码



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

使用道具 举报

发表于 2019-12-5 12:57:40 | 显示全部楼层    本楼为最佳答案   
  1. float (*sellect(char op))(float, float)
  2. {
  3.         switch ('op')            // 这里有问题,你仔细看一看,看看能不能看出是什么问题
  4.         {
  5.         case'+':return add;
  6.         case'-':return sub;
  7.         case'*':return mul;
  8.         case'/':return chu;
  9.         default:
  10.                 return 0;
  11.         }
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2019-12-5 13:11:21 | 显示全部楼层
编译器使用的是vs2019,win10平台
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

哎呀,居然是这么个小问题,难怪直接给这个函数指针直接赋值没有问题,多谢了,解除了我好几天的疑惑
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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