c++ 函数指针详细介绍
时间: 2023-11-30 21:42:18 浏览: 36
函数指针是指向函数的指针变量。与指向变量的指针类似,指向函数的指针变量存储的是函数的地址。通过函数指针,可以在程序运行时动态地调用函数,这对于实现回调函数等功能非常有用。下面是C++中函数指针的详细介绍:
1. 声明函数指针
声明函数指针的语法如下:
```c++
返回值类型 (*指针变量名)(参数列表);```
其中,指针变量名是函数指针的名称,参数列表是函数的参数列表,返回值类型是函数的返回值类型。例如,声明一个指向函数的指针,可以使用以下语法:
```c++
bool (*ptr)(const string &);
```
这里声明了一个名为ptr的指针变量,它指向一个参数为const string &类型,返回值为bool类型的函数。
2. 初始化函数指针
函数指针可以像其他指针一样初始化。例如,假设有一个名为isShorter的函数,它接受两个const string &类型的参数,并返回一个bool类型的值。可以使用以下语法初始化一个指向isShorter函数的指针:
```c++
bool (*ptr)(const string &) = isShorter;
```
这里将isShorter函数的地址赋值给了ptr指针变量。
3. 使用函数指针
使用函数指针可以像调用函数一样调用它所指向的函数。例如,假设有一个名为words的vector<string>类型的变量,可以使用以下语法调用ptr所指向的函数:
```c++
bool b = ptr(words[0], words[1]);
```
这里调用了ptr所指向的函数,并将words和words作为参数传递给它。
4. 使用typedef简化函数指针的声明
由于函数指针的声明比较复杂,可以使用typedef来简化它。例如,可以使用以下语法定义一个名为Func的函数类型:
```c++
typedef bool Func(const string &, const string &);
```
这里定义了一个名为Func的函数类型,它接受两个const string &类型的参数,并返回一个bool类型的值。使用typedef定义函数类型后,可以使用以下语法声明一个指向Func类型函数的指针:
```c++
Func *ptr = isShorter;
```
这里声明了一个名为ptr的指针变量,它指向一个Func类型的函数。
5. 使用decltype简化函数指针的声明
C++11引入了decltype关键字,可以使用它来简化函数指针的声明。例如,可以使用以下语法定义一个名为isFuncPointer的函数类型:
```c++
decltype(isShorter) *Func2 = isShorter;
```
这里定义了一个名为Func2的指针变量,它指向一个与isShorter函数类型相同的函数。