防火小知识:char(*(*p())[])()与char(*(*p[3])())[5]

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 22:04:31

第一部分 指针基础

char *p;                   //p 为指向char的指针

char p[];                 //p为char数组的地址(近似指针)

char **pp;                //pp为指向char指针的指针

char pp[m][n]                 //pp为二维char数组的地址(近似指向指针的指针)

char *pp[];  <==> char* pp[]             //pp是一个数组 数组元素是char指针                      

char(*p) [];             //p指向一维char数组的指针    [] 说明是数组, *p说明是指针 指针内容是char []

总结

说明 指针是从右至左去结合的,

*p[]说明p首先是个是数组,数组元素才是指针而 *p 或者(*p)说明p首先是个指针,指针指向才是外部说明的

如char *p,p只指向了char, 而char (*p)[] 则p指向了char数组;

第二部分 函数指针与指针返回值

char (*p)(void, void);    //p是个指针,指向了一个函数,返回值是char,参数是void,void

char* p(void,void);      //p是个函数,返回值是char* 参数是void void

上面两个也同样说明了p从右向左结合

第三部分 难度理解

char(*(*p())[])();  <=> char(*(*p(void))[])(void);     //p: 返回值为指向一维数组的指针的函数,该一维数组由指向返回char类型
                                                                                   的函数的指针组成。

说明:p首先是个函数 函数的返回值是指针数组,参数为void    相当于 *(*p(void))[]

           然后又声明了指针数组的元素 指针数组中每个指针都指向了一个函数char(*p1)(void) p1相当于p的元素 

char(*(*p[3])())[5];

说明:p首先是有3个元素的数组 元素都是指针

然后说明了数组元素指针的指向 指向一个函数相当于char(*pp)()[5]  pp就是p的元素即p的每个元素都指向一个返回值是char[5] 参数为空的函数;