C++ 函数指针

1. 定义

函数指针,指向函数的指针,而不是对象。函数的类型由它的返回值类型和形参共同决定,与函数名无关。

1
2
3
4
// 定义一个函数
void display(const string& s1,const string& s2);
// 函数指针
void (*fp)(const string& s1,const string& s2);

函数指针的定义,只需用函数指针名替换函数名即可,注意一定要加括号,要不然就成了返回void*类型的函数了。

2. 初始化

1
2
3
4
5
6
7
8
// 定义一个函数
void display(const string& s1,const string& s2);
// 函数指针
void (*fp)(const string& s1,const string& s2);
//方法一
pf=display;
//方法二 取地址符号可选
pf=&display;

3. 使用函数指针

1
2
3
4
5
6
7
8
9
10
11
12
// 定义一个函数
void display(const string& s1,const string& s2);
// 函数指针
void (*fp)(const string& s1,const string& s2);
// 初始化
pf=display;
// 调用函数指针
pf("hello","world");
// 或者
(*pf)("hello","world");
// 等价于
display("hello","world");

4. 函数指针形参

函数指针可以作为形参,传递给函数。函数指针作为应用程序的一个接口。

1
2
3
4
5
6
7
8
// test函数有一个函数指针形参
// 参数是函数类型,它会自动转换成函数指针
void test(void fp(const string& s1,const string& s2));
// 或者显式声明为函数指针
void test(void (*fp)(const string& s1,const string& s2))
{
fp("hello","world");
}

5. decltype 操作符

decltype返回函数类型。

1
2
3
4
typedef void Func(const string& s1,const string& s2);
typedef decltype(display) Func2; //与上方等价的定义,
typedef void (*PFunc)(const string& s1,const string& s2);
typedef decltype(display) *PFunc2; //与上方等价的定义。

Func和Func2是函数类型,PFunc和PFunc2是函数指针类型。

1
2
void test(Func2 fp);
void test(PFunc2 fp);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!