C语言之复杂指针简析

匿名 (未验证) 提交于 2019-12-03 00:18:01
  • 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
  • 数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。

那么下边俩个分别叫做什么呢?
int *p1[4];
int (*p2)[4];
第一个我们称之为指针数组。“[ ]”的优先级比“”要高。p1 先与“[ ]”结合,构成一个数组的定义,数组名为 p1,int 修饰的是数组的内容,即数组的每个元素。这是一个数组,其包含 4 个指向 int 类型数据的指针,即指针数组。
我们可以这样理解:

第二个我们称之为数组指针。在这里“()”的优先级比“ []”高,“*”号和 p2 构成一个指针的定义,指针变量名为 p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚 p2 是一个指
针,它指向一个包含 10 个 int 类型数据的数组,即数组指针。
同样,也可以这样理解:

  • 函数指针:就是函数的指针。它是一个指针,指向一个函数。
  • 函数指针数组:它是一个数组,数组内存储了指向函数的指针。
  • 函数指针数组指针:它是一个指针,只不过这个指针指向一个数组,这个数组里面存的都是指向函数的指针。

    看如下例子:
    char * (pf)(char p1,char * p2);
    这个我们称之为函数指针。“”号和 pf 构成一个指针的定义,指针变量名为 pf.pf指向一个函数,该函数的返回值类型是char ,函数参数有两个,分别为p1和p2,p1和p2都是char * 类型.
    char * (pf[3])(char p);
    char * ((*pf)[3])(char p);

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!