《C++ Primer》读书笔记-第六章 07 函数指针

来源:互联网 发布:数据结构与算法总结 编辑:程序博客网 时间:2024/04/29 02:04
作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23926784
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:

  • 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
  • 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
  • 本文仅作学习交流使用,禁止任何形式的转载

内容

  • 声明函数指针
  • 函数指针作为形参
  • 函数指针作为返回值

声明函数指针

指针指向某种特定的类型,那么函数的类型是什么呢?

函数的类型由它的返回类型形参类型共同决定,与函数名无关

bool lengthCompare( const string&, const string& );

该函数的类型是

bool ( const string&, const string& )

那么可以用下面的形式声明函数指针

bool (*pf)( const string&, const string& );

即使用指针替换函数名即可

使用函数指针

函数指针有以下特殊:

  1. 函数名会自动地转换成指针,取地址符不是必须的
  2. 可以直接使用指向函数的指针调用函数,解引用不是必须的
pf = lengthCompare;  pf = &lengthCompare;

调用

bool b1 = pf( "Hello", "goodbye" );  bool b2 = (*pf)( "Hello", "goodbye" );  bool b3 = lengthCompare( "Hello", "goodbye" );

函数指针形参

void useBegger( const string &s1, const string &s2,       bool pf( const string &, const string & ));  void useBegger( const string &s1, const string &s2,       bool (*pf)( const string&, const string& ));

上面两个函数都是合法的
我们在使用函数指针作形参时
可以显示的将形参定义成指向函数的指针
也可以直接使用函数类型,会自动转换为函数指针

使用类型别名或decltype简化

//函数类型的别名  typedef bool Func(const string&, const string&);    typedef decltype(lengthCompare) Func2;  //函数指针的别名typedef bool(*FuncP)(const string&, const string &);  typedef decltype(lenghtCompare) *FuncP2;

返回函数指针

int (*f1(int))(int *, int);

这样看上去复杂且难以理解,同样我们有多种方式来简化

  1. 类型别名
  2. decltype
  3. 尾置返回类型

到这里前六章的内容我们就完全看完啦!

后面会找一些练习来做,目前想到的有两个方面

  1. leetcode
  2. 使用opencv库做一些简单的图像处理
0 0
原创粉丝点击