关于这个函数指针有一个小问题,希望大佬解答
上次提问让大佬们见笑了,发帖少,对于遵循规范问题我这个帖子我也重新发一下。#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这个网页上也有关于小甲鱼的代码
有所错误望指正
float (*sellect(char op))(float, float)
{
switch ('op') // 这里有问题,你仔细看一看,看看能不能看出是什么问题
{
case'+':return add;
case'-':return sub;
case'*':return mul;
case'/':return chu;
default:
return 0;
}
} 希望能解释下我的那个的错误原因,我这个代码设计为能由用户自由输入并计算例如我输入3+5便显示3+5=8(这里我拿整形举个例子),输入3-5便显示3-5=-2,我在代码后面有补充,我直接复制fp=add是可以实现的,但是采用函数指针为返回值却出现问题,希望能解释下这个,您这个代码我是知道的,相当于我那个直接赋值,是可以运行的 编译器使用的是vs2019,win10平台 人造人 发表于 2019-12-5 13:14
哎呀,居然是这么个小问题,难怪直接给这个函数指针直接赋值没有问题,多谢了,解除了我好几天的疑惑
页:
[1]