C语言复杂声明,指针的复杂用法

有一个声明如下: char *(* (*a[n] ) () )( );

如何理解?

优先级是要记住的 [] ,() 优先级比*高。再有 (*p)() 这是一个整体,代表函数指针 ,(*p[n])() 代表一个函数指针数组,该数组里面全是指向函数的指针(address);

*(*p[n])() ;该数组里面全是指向函数的指针返回一个地址。

(*(*p[n])())() ,也是一个函数指针, ,*(* (*a[n] ) () )( ),指向该地址的指针的指针函数返回一个地址

总体就是:这是一个包含N个指向返回指向字符的指针的函数的指针的数组。

其实可以简单些: char *(* (*p ) () )( );把数组去掉好理解些。就是函数指针的嵌套。

 

还有一种逆向思维 :char *(*p)()

1:*(*p)()是一个char;

2:(*p)()是函数调用候返回的char的地址;

3:(*P)是返回该函数;

4:p 是该函数的地址。

其实这个声明比较简单:一个函数指针P调用后返回一个地址,该地址指向一个char行变量。

再来一个:

char * const *(*next)()

这个比较好理解,next为一个函数指针,指向的函数被调用后返回一个(指向char的常量型的指针---这个指针不可被修改);

 再来一个

p=(char(*)[20])malloc(20) 

这个也比较简单,我向内存申请了20字节的空间,然后把它每个空间都强转为char型空间

 

最后建议一下:最好不要做如此复杂的声明!难以理解,小心被人打

posted @ 2017-05-12 13:06  颜小雀  阅读(430)  评论(0编辑  收藏  举报