标题:使用函数指针数组编译出错
只看楼主
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
 问题点数:0 回复次数:0 
使用函数指针数组编译出错
程序代码:
#include <stdio.h>
#include <stdlib.h>

double add(double a, double b);/**/
double subtract(double a, double b);/**/
double multiply(double a, double b);/**/
double array_op(double array[], int size, double (*pfun)(double,double));/*排列*/
               /*       数组     元素个数          函数指针              */

int main()
{
    double x[] = {1,2,3,4,5,6,7,8,9,10};
    double (*pfun[2])(double,double);

    pfun[0] = subtract;
    pfun[1] = add;

    printf("%lf ",array_op(x, 4, pfun));

    return 0;
}

double array_op(double x[], int size, double(*pfun)(double,double))
{
    double result = 0.0;
    for(int i = 0; i < size ; i++)
    {
        if((i+2)%2 == 0)
         result = pfun[0](result, x[i]);/*+*/
        else
         result = pfun[1](result, x[i]);/*-*/
    }
    return result;
}


double add(double a, double b) /*a为结果 b为后续*/
{
    return a+b;
}

double subtract(double a, double b)
{
    return a-b;
}

double multiply(double a, double b)/*没有用到?*/
{
    return a*b;
}

书上的练习 编译提示 error: subscripted value is pointer to function|

习题9.2 函数原型:

double add(double a, double b); // returns a + b
double subtract(double a, double b);  // returns a - b
double multiply(double a, double b);  // returns a * b
double array_op(double array[], int size, double (\*pfun) (double, double));

array_op()函数的参数是:要运算的数组、数组元素数目以及一个函数指针,该函数指针指向的函数定义了在连续几个元素上进行的操作。在实现array_op()函数时,将subtract()函数传送为第三个参数,subtract()函数会用交替符号组合这些元素。因此,对于有4个元素x1、x2、x3、x4的数组,subtract()函数会计算x1-x2+x3-x4的值。

用适当的main()版本演示这些函数的运作。

又看了一遍题,好像解题思路出错了,
但还是请问一下,为什么上面的代码编译会报错呢?是作为变元传送的 函数指针数组 参数写法不对么?

预谢!

在原型中改为  (*pfun[])() 编译成功 ,但是似乎计算不正确,


[此贴子已经被作者于2019-5-1 08:09编辑过]

搜索更多相关主题的帖子: 函数 指针 数组 编译 double 
2019-05-01 07:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494487-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.130160 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved