函数指针、数组指针、指针数组

函数指针

函数指针是指向函数的指针,对比int指针,char指针,就知道指针前面的修饰词用来说明指针指向的对象的类型,指针的定义例如:

int (*fun) (int *);

这表示一个函数指针,其参数为int *, 返回值为int。

对于函数指针的定义语句,尤其要注意的是()不能少,指针符号*不能少。


返回指向函数的指针

函数可以返回指向函数的指针,那么该如何写呢?

首先我们写一个函数f(int),这代表是一个带有Int类型参数的函数。若f的返回值是一个带有Int形参的返回int类型的函数指针,

带有Int形参的返回int类型的函数指针可以写成;

int (*fun)(int)

于是,我们只要将fun替换成f(int)即可:

int (*f(int))(int)

数组指针

数组指针是一个指针(中文表述的特点要牢记:最后的称呼才是这个事物的本质,而前面的名词都是用来修饰的),它指向的是一个数组,那么该如何表示呢?

int (*p)[10];//表示一个指针指向一个包含10个元素的数组,其中每个元素都是int 类型

这时候或许你要问,为什么要加括号,因为[]的优先级高于(),如果不加,则首先和[]结合,那么就成了一个10个元素的数组,每一个元素是一个int *类型。

第一次看这些内容的时候,我也会觉得一头雾水,后来发现其实这样嵌套的指针如何判断只要由内而外替换即可。下面我们就拿一个经典的笔试题目来做一下:

1)一个整型数

int a;//这个很简单

2)一个指向整型数的指针

int *a;//这个很简单
3)一个指向指针的指针,它指向的指针是指向一个整型数

int **a;//这个很简单
4)一个有10个整型数的数组

int a[10];//这个很简单
5)一个具有10个指针的数组,该指针是指向一个整型数

int *a[10];//这个内容在之前解释过了,由于[]的优先级高于*,于是我们先看a[10],它的实质是一个10个元素的数组,那么剩下的int *就修饰这个数组,即元素是Int*l类型
6)一个指向10个整型数数组的指针

int (*a)[10];//首先我们知道这是一个指针,所以*a,那么指针指向的是一个10个int型元素数组,于是得到int (*a)[10]

7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数

int (*a)(int);//首先这是一个指向函数的指针,那么原型是(*a)(),函数有一个整型参数,于是(*a)(int),该函数返回一个整型数,int (*a)(int)

8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (;//首先这是一个数组,a[10],其次,这个数组中的元素是指针,*a[10],然后指针指向一个函数(*a[10])(),这个函数有一个整型参数并返回一个整型数,即int (*a[10])(int);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值