C指针
非原创,感觉作者写的很有意思,特拿来记录一番。
int a,
int *a,
第一行代码:a是int型
第二行代码:*a是int型, a是int型指针
同理
int (*p)(int)
(*p)(int) 是int型,后面带一个(int),则(*p)是函数,那么p是函数指针。
那么函数指针的指针呢?
int *(*p)(int)
*(*p)(int)是int型,(*p)(int)是int的指针,(*p)是函数,p是函数指针。get√
//再变化一下=> int* (*p)(int) ,看出来没,(*p)(int) 是 int*型,(*p)是函数,p是函数指针。那么这是一个返回int指针的函数指针,所以这不是函数指针的指针。
int (**p)(int)
(**p)(int)是int型,**p是函数,*p是函数指针,p是函数指针的指针。
----------
int *(*(*(*abc)())[6])()如何解读
*(*(*(*abc)())[6])()是int型,
(*(*(*abc)())[6])()是int指针,
(*(*(*abc)())[6])是函数,
(*(*abc)())[6]是函数指针,
(*(*abc)())是函数指针的数组,
(*abc)()是函数指针的数组的指针,
(*abc)是函数指针的数组的指针的函数,
abc是函数指针的数组的指针的函数指针!get√
------------
最好用typedef,这样会更容易看:
typedef int func(int);
typedef func* pfunc;
typedef pfunc* ppfunc;
ppfunc p;
理解typedef,typedef int (* func)(int),意思是 func = int (*xxx)(int)