鱼C论坛

 找回密码
 立即注册
查看: 1459|回复: 2

[已解决]S1E30 指针函数和函数指针

[复制链接]
发表于 2018-12-22 20:41:49 | 显示全部楼层 |阅读模式

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

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

x
int main(void)
{
        int i;
        double x, y, result;
        double (*func_table[4])(double, double) = {add, sub, mul, divi};    //这行代码应该怎样理解呢?我的理解是:func_table是一个指针,指向一个四个元素的数组,然后就读不下去了?这里为什么可以直接定义数组里的元素?

        printf("请输入两个数:");
        scanf("%lf %lf", &x, &y);

        printf("对这两个数进行加减乘除后的结果是:");
        for (i = 0; i < 4; i++)
        {
                result = (*func_table[i])(x, y);
                printf("%.2f ", result);
        }
        putchar('\n');

        return 0;
}

问题2:
#include <stdio.h>

float add(float x, float y)
{return x+y;}
float calc(float (*fp)(float, float),float x,float y)
{return (*fp)(x,y);}
float (*select(char op))(float x,float y)         
{switch(op){case '+':return add;}}
int main()
{
 float a=1.0;
 float b=2.0;
 char op;
 float (*fp)(float,float);
 fp=select(+);
 printf("%.2f",calc(fp,1,2));
 return 0;
}
1.每次编译都会提醒倒数第三行的右括号前差了点什么,是什么问题呢?
最佳答案
2018-12-22 21:16:05
本帖最后由 Croper 于 2018-12-22 22:28 编辑

1、func_table是一个长度为4的函数指针的数组;指向的元素必须是有两个double参数,返回值为double的函数;并初始化为指向add, sub, mul, divi这4个函数
2、+作为一个字符需要写成'+'的形式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-22 21:16:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Croper 于 2018-12-22 22:28 编辑

1、func_table是一个长度为4的函数指针的数组;指向的元素必须是有两个double参数,返回值为double的函数;并初始化为指向add, sub, mul, divi这4个函数
2、+作为一个字符需要写成'+'的形式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 08:41:26 | 显示全部楼层
楼主您好。首先回答您的第一个问题。
double (*func_table[4])(double, double) = {add, sub, mul, divi};    //这行代码应该怎样理解呢?
回答:这里不是一个指针指向一个数组。而是一个数组中放着4个函数的指针,分别指向+-*/四个函数。
这里为什么可以直接定义数组里的元素?
回答:这个就是一般函数指针的数组赋值方式呀。函数指针不同于普通指针,他必须说明返回值和参数列表的类型。
每次编译都会提醒倒数第三行的右括号前差了点什么,是什么问题呢?
回答:调试时不能只看编译器提示找错误,他只能作为提示,说明程序在这附近有问题。此处的问题是 参数为char类型,‘+’这是字符,+是运算符。
若能解决楼主问题,欢迎评分最佳哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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