函数指针
来源:互联网 发布:mac关闭盖子不断网 编辑:程序博客网 时间:2024/06/05 07:08
关于指针的话题很多,随随便便google一下,就有很多资源。下面这篇文章就可以给你科普一下
函数指针:http://blog.csdn.net/porscheyin/article/details/3461632
函数指针一直是C语言的一块难啃的骨头,本文主要关注c++11对此的语法糖
含有复杂返回值的函数
在写一个函数之前,我们要搞明白函数的返回值是什么(数字、指针、自定义的结构体etc);我们假定返回值的类型是T,那么函数的声明一般为T func(。。。);其中。。。表示函数的参数。
当我们分析一个函数时,通常是它的返回值非常复杂,从而导致我们难以迅速解析该函数。例如下面这段代码:
上面的get_addr函数的返回值有很多种推断方法,最简单的莫过于根据第四行的&mat[index]来分析。单独从函数名上,我们可以作如下考虑:
1. typedef int* (*T)[10];
2. 将函数改写为 T get_addr(int* mat[][10], int index)
于是程序如下:
C++11标准提供了一种新的写法:
在这里,我们发现函数的定义变得和以往有些不一样, 多了一个箭头,箭头右边是返回值类型。由于返回值类型在参数列表的右边写出,这样相对更加容易看明白。
函数指针
指向函数的指针。
如我们需要一个指向int *(*get_addr(int* mat[][10], int index))[10]的函数指针get_addr_ptr,我们仅仅需要将声明中的get_addr替换成(*get_addr_ptr)就可以了:
int *(* (*get_addr_ptr) (int* mat[][10], int index))[10]。
如果你觉得麻烦,可以使用C++11的如下方法来替换:
autoget_addr_ptr = get_addr;
如果这还不够,比如和get_addr相同参数相同返回值的函数有很多个,需要动态绑定某个函数,这时候也可以这样写:
auto (* get_addr_ptr)(int* mat[][10], int index) ->int* (*)[10]
- 指针函数 函数指针
- 函数指针/指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 指针函数,函数指针
- 函数指针,指针函数,
- 指针函数,函数指针
- 函数指针 指针函数
- 函数指针、指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 函数指针&指针函数
- 指针函数 函数指针
- 指针函数 &函数指针
- 函数指针&指针函数
- void指针 函数指针
- .net实现下载功能
- Android webView 中调试javaScripte
- UML用例图-教程详解
- SQL Server查看及导出建表语句
- java缓存例子代码
- 函数指针
- 眼花缭乱中看Metro Style—MS Apps Store—Desktop Apps以及Win-Runtime和Win32
- Myeclipse性能优化
- Windows下的ffmpeg编译
- 句柄的理解
- 面试
- boost 1.47和boost 1.52 编译
- srand( time(NULL) )
- iPhone和iPad开发中的图标大小和设置