您的位置:首页 > 其它

指向函数的指针学习笔记

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. 指向函数的指针程序例子

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: