GESP 五级 · GESP 202309 C++ 五级 第 8 题

选择题 · 答案 C · 考点:函数

← 整套速查表 GESP 五级 全部真题

题目

有关下面代码正确的是( )。

// 在C++语言中,可以通过函数指针的形式,将一个函数作为另一个函数的参数。
// 具体来说:bool checkNum(bool (*Fx)(int), int N); 声明了一个函数,
// 其第一个参数是函数指针类型,指向一个接收一个int参数且返回值为bool的函数。
#include <iostream>
using namespace std;

bool isEven(int N) {
    return N % 2 == 0;
}

bool checkNum(bool (*Fx)(int), int N) {
    return Fx(N);
}

int main() {
    cout << checkNum(isEven, 10) << endl;
    return 0;
}
答案:C

考点

函数

解题思维

拿到题别慌,先盯着函数指针声明 bool(*Fx)(int) 看,它要的是个'吃int吐bool'的函数。再看isEven,签名分毫不差,直接传进去就能跑。最后别忘了cout输出bool时变1还是0这个细节,这才是定胜负的关键。

常见错误

最大坑就在选项C,很多人以为cout<<true会输出'1',结果下意识选了D或者觉得代码有错。其实C++里bool转int就是1和0,true就是1。另外函数指针声明里括号的位置最容易看错,把bool(*Fx)(int)看成bool*Fx(int),以为是指针函数,其实那是另一码事。还有选项A和B,觉得传函数名会报错,其实函数名作为实参会自动转为地址,只要签名匹配就完全合法。

详细解析(节选)

函数指针与回调机制:一道GESP五级经典题的深度拆解

考纲定位

这道题出自GESP五级《C++程序设计》,核心考点就是函数指针以及函数作为参数传递(回调机制)。命题人特意选了五级,因为四级只要求会定义和调用函数,而五级明确要求掌握函数指针的声明与使用。这题看似简单,实则是区分四级与五级的硬门槛——很多考生卡在"只会调用函数、不懂传递函数"这一步。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断