浅谈特殊的指针。

今天我们来聊一聊,那一些特殊的指针。

1.指针数组和数组指针。

我们先来看下面两个语句:

int *p[10];    (1)

int (*p)[10];  (2)

 

这个时候我们需要引入一个很重要的东西——运算符优先级表。

不难看出,“ [] ”优先级高于“ * ”,不难得出结论语句(1)中p先和“ [] ”结合,语句(2)中p因为()的存在,先和" * "结合,所以可以得出,语句(1)指的是指针数组,顾名思义,即存放指针的数组,而语句(2)是数组指针,即一个有能力指向一个数组的指针。

2.函数指针。

接下来我们来看下面两个语句:

void (*pfun1)();      (1)

void *pfun2();        (2)

 

 

 

我们对于语句(2)应该很熟悉,这就是一个返回值为void*类型的函数,而对于语句(1),就又要用到我们的运算符优先级表了,语句(1)中p先与“ * ”结合,所以语句(1)是一个指针,而且他指向一个没有参数的函数,返回值类型为void。

3.函数指针数组

最后我们要讲一下函数指针数组,看下面代码:

int (*parr[10])();

 

根据优先级,parr先和" [] "结合,所以该语句是一个数组,然后parr[]与“ * ”结合,所以数组里的内容是指针,而且是函数指针。

函数指针数组用途有:计算器。具体在这里也不举例了。

4.总结

讲了这些,我们就需要提一下,我们在区分一个变量是函数还是指针还是数组的时候,最需要用到的一个工具——运算符优先级表。有了这东西,我们将来遇到数组指针,指针数组,函数指针,函数指针数组,甚至指向函数指针数组的指针的时候,也可以很好的看出其类型。

感谢审阅。

 

转载于:https://www.cnblogs.com/shy0322/p/7856443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值