如何获取结构体中函数指针的返回值并传递给其他函数
实现方法如下
你只需要在调用结构体中的函数指针时,用变量承接返回值即可,不需要硬编码数值,具体实现逻辑如下:
- 获取函数指针返回值
你之前的代码中调用Funcion.Fun2D(10000)时没有存储返回值,因此无法获取结果,修改为如下写法即可拿到返回值:
float res = Funcion.Fun2D(10000);
变量res中存储的就是函数运算的结果,可直接后续使用。
- 实现要求的布尔返回值函数
按照需求可以实现两个版本的函数,分别对应接收运算结果、接收Function2D实例的场景:
- 接收乘法运算结果的版本
// 需要引入stdbool.h头文件使用bool类型 #include <stdbool.h> bool checkCalcResult(float calcRes) { // 此处替换为你需要的判断逻辑即可,示例为判断结果是否大于0 return calcRes > 0; }
- 接收Function2D类型参数的版本
直接在函数内部调用结构体中的函数指针拿到结果,完全不需要硬编码数值:
bool checkFun2D(Function2D func, float input) { float calcRes = func.Fun2D(input); // 示例判断逻辑:校验函数是否实现了输入值乘以2的要求 return calcRes == input * 2; }
完整可运行示例代码
#include <stdio.h> #include <stdbool.h> // 结构体定义 typedef struct Function2D { float (*Fun2D) (float); } Function2D; // 乘法函数,建议放在main之前避免编译器找不到声明 float Test (float n) { return n * 2; } bool checkCalcResult(float calcRes) { return calcRes > 0; } bool checkFun2D(Function2D func, float input) { float calcRes = func.Fun2D(input); printf("输入值%f的运算结果为%f\n", input, calcRes); return calcRes == input * 2; } int main() { Function2D Funcion; Funcion.Fun2D = Test; // 获取函数返回值 float testRes = Funcion.Fun2D(10000); printf("10000的运算结果为%f\n", testRes); // 调用两个布尔函数测试 bool res1 = checkCalcResult(testRes); bool res2 = checkFun2D(Funcion, 256.5); printf("checkCalcResult返回值:%d,checkFun2D返回值:%d", res1, res2); return 0; }
内容的提问来源于stack exchange,提问作者Humberto Longoria
相关产品推荐
相关产品推荐

