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型空间。
最后建议一下:最好不要做如此复杂的声明!难以理解,小心被人打。