C++笔记:函数指针
[P238, C++ Primer, 7.9]
函数与函数指针
在C++中,直接使用一个函数名很可能会被自动转换为使用该函数的指针。
// 使用函数名等价于使用函数的指针。
void sub()
{
}
int main()
{
sub();
(&sub)(); // 实质和上一行相同。
void (*psub)();
psub = sub;
psub(); // 实质相同。
}
类似的,传递函数形参时,定义为传递函数和传递函数指针是等价的。
void sub(int (int))
{
}
void _sub(int (*)(int))
{
}
int sub3(int a)
{
return a;
}
int main()
{
sub(sub3);
_sub(sub3); //等价
}
定义返回值是函数指针的函数
普通的定义方法显得非常晦涩难懂。试图理解以下函数原型:
int * (*ff(int))(int*,int);
它的含义是:定义一个函数 ff,带有一个 int 类型的形参。其返回值为 int ()(int*, int),即返回一个带有 (int*,int) 的形参类型并返回 int * 类型的函数指针。 注意:对于该原型中的第二个 ,如果修改为 ()ff(int),含义就改变为 ff(int)本身成为了函数指针。由于没有带括号,ff(int) 只是普通函数,* 修饰的含义是表明其返回值为指针类型。 所以我们有必要对这样晦涩难懂的返回函数指针的函数进行简化。方法是使用万能的 typedef。
typedef int * (*pfun)(int*, int);
pfun ff(int);
指向重载函数的指针
使用这种指针时,必须注意,指针一定要和某一重载版本的函数完全对应。否则,对该指针的赋值将产生编译时错误。
题外话:我帮你整理了包括 AI 写作、绘画、视频(自媒体制作)零门槛 AI 课程 + 国内可直接顺畅使用的软件。想让自己快速用上 AI 工具来降本增效,辅助工作和生活?限时报名。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。