指针数组,数组指针,函数指针,函数指针数组,函数指针数组的指针

#指针数组:

###指针数组首先是个数组,其次,数组里面存放的元素是指针类型。

####指针数组的书写形式:
int *arr1[10] //整型指针数组
char *arrr2[5] //字符型一维指针数组
char *arr3[3][2]//字符型二维指针数组
*请注意:由于下标引用符 [ ] 的优先级 高于 解引用操作符 * 所以,arr 先与[] 结合,说明是个数组,在于 结合,说明数组里面的内容是指针类型。


#数组指针:

###数组指针的落点是指针,这个指针指向数组。即指针存放的是数组的地址。

####数组指针的的书写形式:
int ()arr[10] //整型数组指针
char (
)arr2[5] //字符型一维数组指针
char (*)arr3[3][2] //字符型二维数组指针

注意:书写时由于操作符优先级的问题,必须先要给 * 加上括号,要先保证是一个指针。


#函数指针:

###函数有自己的地址。
###函数指针同样是个指针,这个指针指向函数。
####函数指针的书写形式:
int (*p) (int , int) // 指针p指向函数,函数的有两个参数,都是整型,函数的返回值是整型
void (pfun)() //pfun先与结合,说明pfun是指针,指针指向函数,该函数没有参数,返回值为空
请注意:函数指针可以类比数组指针的书写形式,但是在书写时需要更加注意。以上面第一个函数指针为例,要写一个返回值是整型的函数指针。
1.保证是个指针,所以 p
2.函数参数类型写在括号中,(int, int ),但是直接写成p(int , int),会改变结合方向,这是对函数解引用,所以对于第一步中的指针写法,必须加上括号

3.在书写返回类型


#函数指针数组:

函数中指针数组 可以 记做:函数指针的数组。由两部分组成,首先是个数组,其次数组里面存放的是函数指针。

####函数指针的书写形式:
int (*arr[10]) (int, int)
char (*arr2[5]) (char, char)

请注意:函数 指针 数组, 只要完成这三者的正确书写就行。一般都是倒着写 先保证是个数组 然后 再是 指针,最后是个函数。以上面第一个为例, []先和 arr结合 ,说明是个数组,在于 结合,说明是个指针,最后将之前写的作为一个整体(当做函数指针的函数名),写入函数指针的形式。*
在实际使用函数指针数组的时候,使用顺序是,先用到数组,根据数组对应的下标找到函数指针,再根据指针调用相应的函数。


#函数指针数组的指针:

###说白了,这就是在函数指针数组基础上加了一个指针,这个指针存放 函数指针数组 的地址,即该指针指向 函数指针数组。

####函数指针数组 的指针的书写形式:
void ((pfun)[10])(const char)
int (
()p[5])(int, int) //注释里面写的形式是错误的,但是有助于帮助理解int ()((*p)arr[5]) (int,int)
请注意,函数指针数组 的指针,不难写,但是一定要有套路,按照顺序往下写!
这里写图片描述

例题:

声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,
该函数的返回值是int,参数是int*,正确的是(C)
A.int *p[10])(int*)
B. int [10]*p(int *)
C. int (*(*p)[10])(int *)
D. int ((int *)[10])*p

理由如下:
  先看未定义标识符p,p的左边是**p表示一个指针,跳出括号,由于[]的结合性大于*,
所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,修释数组的元素,
*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,
根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int*,
返回值是int。所以选C。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值