C语言函数指针编译报错求助:参数类型不兼容问题
函数指针参数传递错误分析与修正
问题核心
你编译报错的根本原因是参数类型不匹配:
array_op的第三个参数要求传入一个double (*)(double, double)类型的函数指针- 但你写的
(*pfun)(a, b)是直接执行函数调用,返回的是一个double类型的数值,完全不符合参数要求,所以GCC报错。
修正方法
你需要直接传递函数指针(函数名本身就是函数指针,或者指向函数的指针变量),而不是执行函数后的结果。
修正后的调用代码示例
// 情况1:直接传递函数名(比如你要使用的add函数) result = array_op(values, numberOfElements, add); // 情况2:如果已经定义了函数指针变量pfun(指向add这类函数) double (*pfun)(double, double) = add; result = array_op(values, numberOfElements, pfun);
完整可运行代码示例
#include <stdio.h> #include <stddef.h> // 基础操作函数:两数相加 double add(double x, double y) { return x + y; } // 你的array_op函数原型 double array_op(double array[], size_t size, double (*pfun)(double, double)); // array_op的实现示例(假设是用传入的函数对数组元素累加) double array_op(double array[], size_t size, double (*pfun)(double, double)) { double result = array[0]; for (size_t i = 1; i < size; i++) { result = pfun(result, array[i]); } return result; } int main() { double values[] = {1.5, 2.5, 3.5, 4.5}; size_t numberOfElements = sizeof(values) / sizeof(values[0]); double result; // 直接传递add函数名作为参数 result = array_op(values, numberOfElements, add); printf("累加结果:%.1f\n", result); // 用函数指针变量传递 double (*pfun)(double, double) = add; result = array_op(values, numberOfElements, pfun); printf("累加结果(指针版):%.1f\n", result); return 0; }
额外注意点
- 在C语言中,函数名等价于函数的地址,不需要加
&(加&add也合法,和add完全等价) - 你之前尝试的
(pfun)(a, b)、pfun(a, b)都是执行函数调用的写法,返回的是函数的计算结果,不是指针,所以必然报错 - 对比你参考的Stack Overflow示例:
add2to3接收函数指针,调用时应该传add这类函数的地址,而不是add(2,3)的返回值
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

