函数指针和函数指针数组
时间: 2025-01-21 11:27:04 浏览: 38
### C/C++ 中函数指针与函数指针数组
#### 定义和声明
在C/C++中,函数指针是一种特殊的指针变量,它存储的是函数的入口地址。通过这种方式可以间接调用函数。
对于返回`int`类型的无参函数,其对应的函数指针定义如下[^1]:
```c
// 声明一个指向返回 int 类型且没有任何参数的函数的指针
int (*funcPtr)();
```
当涉及到带有参数的函数时,则需指定这些参数的数据类型:
```c
// 声明一个指向接受两个整数作为输入并返回整数值的函数的指针
int (*addFunc)(int, int);
```
而所谓“函数指针数组”,即是指向多个相同签名(相同的返回值类型以及形参列表)函数的一组连续内存位置中的每一个都保存着不同实际函数的位置信息。因此,在创建这样的结构之前要先确定好目标函数原型:
```c
// 创建一个含有三个元素的函数指针数组,每个元素都可以指向接收两个浮点数并返回单精度浮点结果的函数
float (*fpArray[3])(double, double);
```
#### 使用方法
一旦有了上述形式之一的对象之后就可以像下面这样操作它们:
- **赋值**: 将具体实现体赋予相应的函数名来初始化该对象;
```c++
void greet() {
printf("Hello world!\n");
}
// 初始化 funcPtr 指向 greet 函数
void (*funcPtr)() = &greet; // 或者省略&符号写成void(*funcPtr)=greet;
```
- **调用**: 利用已知的目标执行相应逻辑
```c++
// 调用由 funcPtr 所指示的方法
funcPtr();
```
同样的原则适用于处理整个集合的情况——只需遍历容器内的每一项即可完成批量作业;比如这里有一个简单的例子展示了如何利用循环机制依次触发一组预设动作:
```cpp
#include <iostream>
using namespace std;
// 定义几个简单运算符重载版本
int add(int a, int b){return a+b;}
int substract(int a,int b){return a-b;}
typedef int (*BinaryOp)(int , int );
const BinaryOp ops[]={
add,
substract
};
int main(){
for(BinaryOp op : ops){
cout<<op(7,-2)<<endl;// 输出9 和 9
}
}
```
阅读全文
相关推荐

















