浅谈特殊的指针。

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

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.总结

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

感谢审阅。

 

posted @ 2017-11-18 13:17  shy_BIU  阅读(364)  评论(0编辑  收藏  举报