小冥冥 发表于 2019-12-5 12:57:39

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

上次提问让大佬们见笑了,发帖少,对于遵循规范问题我这个帖子我也重新发一下。


#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;
      }
}

小冥冥 发表于 2019-12-5 13:05:40

希望能解释下我的那个的错误原因,我这个代码设计为能由用户自由输入并计算例如我输入3+5便显示3+5=8(这里我拿整形举个例子),输入3-5便显示3-5=-2,我在代码后面有补充,我直接复制fp=add是可以实现的,但是采用函数指针为返回值却出现问题,希望能解释下这个,您这个代码我是知道的,相当于我那个直接赋值,是可以运行的

小冥冥 发表于 2019-12-5 13:11:21

编译器使用的是vs2019,win10平台

小冥冥 发表于 2019-12-5 13:21:11

人造人 发表于 2019-12-5 13:14


哎呀,居然是这么个小问题,难怪直接给这个函数指针直接赋值没有问题,多谢了,解除了我好几天的疑惑
页: [1]
查看完整版本: 关于这个函数指针有一个小问题,希望大佬解答