指向函数的指针学习笔记
2014-03-27 16:32
134 查看
1.1 指向函数的指针用途:
1. 声明指向一个特定函数的指针,通过这个指针来调用它,(一个函数名字本身就是一个指向这个函数的指针)。2. 作为另一个函数的返回值,通过返回指向不同函数的函数指针来调用不同的函数。
1.2 首先需要了解基本的概念
1. ()出现在变量的右边,是一个函数调用运算符,{}里面的是函数体,通过向函数体传入参数来达到预期目的。同时,函数名字左边的类型名定义了函数的返回值的类型。
2. *预算符是一个间接引用运算符(任何情况下),例如:int* a的标准写法是int *a,int *a并不是说a是一个int*类型的变量,int* 并不是类型名。正确的理解应该是对a进
行间接引 用(a里面保存的是一个地址,由这个地址可以找到内存的一块区域),得到的结果是int类型的变量,即:a指向的那块内存保存的是一个int类型的变量。
1.3 指向函数的指针
int * abs(int) 表示对函数abs的返回值做*运算以后得到了一个int值,即:函数abs的返回值是一个指向int类型值得指针。int (*abs)(int)表示abs里面保存的是一个地址,对应内存的那块区域保存的是一个函数,这个函数的返回值是int类型。所以abs是一个指向返回值是int类型变量 的函数的指针。
int *(*abs)(int)根据前面的分析,这个就更好理解了。
* abs()
下面看一个复杂的例子:int (*abs(int))(int *,int*)可以先把(*abs(int))看成一个整体(用sbc代替),这个整体右边是一个函数调用运算符,那么它就个函数或者是个指向函数的指针,这个函数的返回值是int类型。再看里面,abs是一个函数名,返回值是一个指针(为什么说它返回值是个指针,左边都没有类型说明符!),这个指针指向哪里呢?刚刚已经说了 int abc (int* ,int*)是个函数,abc是个函数名或者指向函数的指针,所以(*abs(int))是个函数或者指向函数的指针,所以abs是返回值是指向一个“返回值是int有两个int*参数的函数”的指针的函数。简而言之:abs的返回值是一个指向函数的指针。
总结:
int (*abs(int))(int *,int*) 遇到这种情况,我们直接把(*abs(int))看成是函数或者指向函数的指针就行 ,也就是说,括号里面经过一堆运算以后是一个指向函数的指针或者函数。对abs(int)的返回值取*是一个函数名,所以abs的返回值是一个指向函数的指针。
一般来说,用typedef关键字会使该声明更简单易懂。在前面我们已经见过:
int (*Ptr)(int *, int);
当使用typedef声明后,则Ptr就成为了一个函数指针“类型”,即:
typedef int (*Ptr)(int *, int);
Ptr abs(int);
(上面说了那么多废话,其实是编者的大脑在做斗争,我也是刚刚学到这里,有什么不足或者错误,希望大家可以帮忙进行改正。)
2. 指向函数的指针程序例子
相关文章推荐
- 指向函数的指针 学习笔记
- 黑马程序员—C学习笔记—指针字符串与其内存细节
- [C#]C#学习笔记-索引器,指针类型,隐式类型,扩展方法,分部方法,匿名类型
- 函数指针学习笔记
- C语言学习笔记之指针篇(一)
- C++ Primer 学习笔记_24_函数(续3) --重载函数、指向函数的指针
- [学习笔记]C和C++中指针的基础知识点(一)
- C++学习笔记(第六章 初识指针 及 指针与数组 之一)
- C++学习笔记30,指针的引用(2)
- C与指针学习笔记——有效的指针
- c语言学习笔记31之函数指针
- FreeBASIC学习笔记——8.4 指针与函数/过程
- iOS 阶段学习第八天笔记(指针)
- C语言学习笔记22——数组参数和指针参数
- C/C++中关于地址、指针和引用变量的学习笔记(三) : 结构
- swift学习笔记-----swift中的指针
- C语言高级专题学习笔记-函数指针实战
- VS2010 C++ 学习笔记(六) this指针 const 指针 引用
- 奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记
- C++primer学习笔记----智能指针