指针函数与函数指针

1、明确谁是主体,前面是定语,后面是主体。

指针函数:返回指针的函数

函数指针:指向函数的指针

2、函数类型

函数包括:函数名,返回类型,形参表,修饰符。

函数类型表明一类函数,这一类函数的返回类型和形参表相同,而与函数名无关。

一个函数,把函数名去掉,就是函数类型。比如:

int Fun (int a) --- 函数Fun,函数Fun的类型为 int (int a);

对于函数类型:在返回类型和形参表之间,加上一个函数名,就表示一个特定的函数。在返回类型和形参表之间,加上一个指针名,表示指向这一类函数的指针。

3、区分

int * Fun(int a ) :函数名为Fun,返回类型为 int*

int  (*Fun) (int a):函数指针,指向一类函数 int (int a)

函数指针也是一种类型,去掉指针名,即int  (*) (int a),表示一类指针

思考:函数既然能返回指向数据的指针,当然也可以返回指向函数的指针,原则上应该这样写:

int  (*) (int a) G (int a); 实际上是这样写的:int  (* G(int a) ) (int a),

阅读方法是按照优先级,由内到外。先看G (int a )是一个函数,形参表为int a,返回类型是 int  (*) (int a)

为了便于理解,使用typedef,如下:

typedef int  (* PF) (int a);

PF G(int a)

4、指针类型

指针类型分为指向数据的指针和指向函数的指针,二者不能相互转换。

5、函数不能返回另一个函数或者内置数组类型,但是,可以返回指向函数的指针,或者指向数组的指针。

6、按理说,函数指针必须指向函数的地址,也就是

int Fun(int a);

int (*PF) (int) = &Fun;

但这样写 int (*PF) (int) = Fun;也是可以的,因为发生了蜕变,Fun会自动转化为Fun的地址。

对于函数来说,函数名就表示函数的地址。

posted on 2013-09-18 16:47  Andy Niu  阅读(520)  评论(0编辑  收藏  举报