写在前面:指针数组和数组指针在平时本身用的就不算太多,但偶尔项目中用到的时候会一阵迷糊,所以这里先把这两种关系写下来,后续遇到问题的时候,有依据可查。
正文:
1、先明确一个C语言运算符的优先级关系:()>[ ]> *;
2、然后再来看: int (* p)[ 5]; 根据优先级,先看( )内,p是一个指针,理解到这里,即不管p后面怎么样,p就是一个指针,后面的
[ ]又说明了 p是一个什么样的指针呢,p是一个指向数组的指针,然后再加上前面的int,所以最后,p是一个指向 int 类型的数组的一个指针。所以这种格式叫 数组指针。
3、 再来看: int *p[ 5]: 根据优先级,先看[ ],p是一个数组,后面不管怎么样,p就是一个数组,再结合 *,数组里面是什么元素呢,数组里面的元素是指针,再加上int, p是一个数组,数组中的元素全是int类型的指针。这种格式就叫 数组指针,也可以写成:int *(p[ 5 ]);
4、数组指针实战:
5、 指针数组实战:
指针数组还有一个很重要的用处就是用来指向 二维数组的第一维,为什么呢?因为指针数组的本质是数组,数组中的元素是指针类型,而二维数组中的第一维是一维数组的首地址,类型匹配可以用指针类型指向。