这是一句 C / C++ 中“函数指针”的声明,我们拆开来慢慢看就很好理解了 👌
int (*fp)(int a, int b);
👉 fp 是一个指针,指向一个函数👉 这个函数:
fp
int a, int b
int
换句话说:
fp 可以指向任意一个 形如 int func(int, int) 的函数
int func(int, int)
(*fp)
这是重点 ❗
int *fp(int a, int b);
这表示:
fp 是一个函数,返回 int*(指针)
int*
⚠️ 完全是另一个意思!
运算优先级变成:
📌 括号是为了改变运算优先级
int add(int a, int b) { return a + b; }
fp = add; // 或 fp = &add;
在 C/C++ 中,函数名本身就表示函数地址
int result = fp(3, 4); // 或 int result = (*fp)(3, 4);
两种写法 完全等价 ✅
void compute(int (*op)(int, int)) { printf("%d\n", op(2, 3)); }
compute(add);
int sub(int a, int b) { return a - b; } fp = add; printf("%d\n", fp(5, 3)); // 8 fp = sub; printf("%d\n", fp(5, 3)); // 2
int (*ops[2])(int, int) = { add, sub }; ops[0](4, 2); // add ops[1](4, 2); // sub
从变量名开始,顺时针读
对这句:
读法是:
fp 是一个指针 → 指向一个函数 → 该函数接收 (int, int) → 返回 int
(int, int)
在 C++ 里,很多时候会用:
std::function<int(int, int)> fp;
或 Lambda:
auto fp = [](int a, int b) { return a + b; };
更安全、可读性更好 👍
如果你愿意,我也可以帮你对比:
你现在是在写 C / C++ / 内核 / 嵌入式 哪一块?
Github开源生信云平台 DEMO