指针函数与函数指针

匿名 (未验证) 提交于 2019-12-02 23:54:01

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的地址。

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

转载于:https://www.cnblogs.com/nzbbody/p/3328686.html

转载请标明出处:指针函数与函数指针
文章来源: https://blog.csdn.net/weixin_30776863/article/details/99234327
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!