一.阅读指针
1.明确优先级:
(p) > p[]数组、p()函数 > *p
括号的优先级最高,其次是数组和函数结合最后才是 *
2. 采用逐步替代法
示例:
int *( *( *a[5]) ( ) ) ( );
1.a是数组,数组里5个元素,数组中存放的是指针,迭代替换
int *( *(P) ( ) ) ( );
2.指针指向的是什么,P后面是个小括号,数组元素是函数指针,参数是空,看返回值;迭代
int *( *P) ( );
3.函数的返回值也是个指针,进一步发现指针式个函数指针,返回值是int * ,参数空
最后总结:a是一个包含5个元素的数组,数组中存放的是函数指针,该函数指针类型是:参数为空,返回值也是个函数指针,返回的函数指针的原型是:参数空,返回值是int * 类型
二.定义指针,尽量不要复杂话,使用typedef 进行定义,减小阅读难度:
如信号函数:void (*signal (int sig, void (*func) (int siga)) ) ( int siga );
typedef定义:
typedef int (*p_sig) (double*, char);
p_sig signal(int sig, p_sig func);
阅读别人的指针代码,没有办法,只能硬着头皮读,自己定义指针一定要小心,避免特别复杂的指针数据结构,如必须,则采用typedef定义;