使用函数指针数组编译出错
程序代码:
#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编辑过]