C语言复杂的函数指针声明

  复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二.

  讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/482771

  自己归纳的一张表

当前类型下一类型的意义
指针 *指针指向的类型
数组 []数组元素类型
函数 ()函数返回值类型

  这是一张关于右左法则的表,右左法则的使用参照上面的连接.

  举例(都是上面连接的...):

  int (*func)(int *p);

  分析: func - 右) - 左* - func是一个指针,更新当前类型为指针 - 左( - 跳出括号 - 右( - 查表得指针指向函数,func是一个函数指针,()里的为函数参数,更新当前类型为函数 - 左int - 查表得函数返回值类型为int

  结论: func是一个函数指针,指向的函数有一个类型为int*的参数且返回值类型为int.

 

  int (*func)(int *p, int (*f)(int*));

  分析: func - 右) - 左* - func是指针,更新当前类型为指针 - 左( - 跳出括号 - 右( - func是函数指针,更新当前类型为函数 - 左int - 指向的函数的返回值类型为int

  结论: func是一个函数指针,指向的函数返回值类型为int,有2个参数,一个类型为int*,另一个类型为函数指针,指向的函数返回值类型为int且有一个int*类型的参数.

 

  int (*func[5])(int *p);

  分析: func - 右[ - func为数组,有5个元素,更新当前类型为数组 - 右) - 左* - 数组元素为指针,更新当前类型为指针 - 左( - 跳出括号 - 右( - 数组元素为函数指针,更新当前类型为函数 - 左int - 指向的函数返回值类型为int

  结论略~

 

  下面的例子省略方向提示,更新当前类型提示,遇括号转向,跳出括号以及结论(手懒,剁

  int (*(*func)[5])(int *p);

  分析: func - * - func是指针 - [ - 指向有5个元素的数组 - * - 数组元素是指针 - ( - 数组元素是函数指针 - int - 指向的函数返回值类型为int

 

  int (*(*func)(int *p))[5];

  分析: func - * - func是指针 - ( - func是函数指针 - * - 指向的函数返回值类型为指针 - [ - 返回的指针指向有5个元素的数组 - int - 数组元素类型为int

 

  int func(void) [5];

  分析: func - ( - func是函数 - int - 返回值类型为int - [ - 返回值类型为有5个int元素的数组

 

  int func[5](void);

  分析: func - [ - func是数组 - ( - 数组元素是函数 - int - 函数返回值类型为int

 

  int (*(*func)[5][6])[7][8];

  分析: func - * - func是指针 - [ - func指向有5个元素的数组 - [ - 5元素数组里的每个元素是有6个元素的数组 - * - 6元素数组的每个元素为指针 - [ - 指针指向7元素数组 - [ - 7元素数组的每个元素为8元素数组 - int - 8元素数组元素为int

 

  int (*(*(*func)(int *))[5])(int *);

  分析: func - * - func是指针 - ( - func是函数指针 - * - 函数返回值为指针 - [ - 返回值指向5元素数组 - * - 5元素数组元素为指针 - ( - 指针为函数指针 - int - 函数返回值为int

 

  int (*(*func[7][8][9])(int*))[5];

  分析: func - [ - func是7元素数组 - [ - 7元素数组元素为8元素数组 - [ - 8元素数组元素为9元素数组 - * - 9元素数组元素为指针 - ( - 为函数指针 - * - 函数返回值为指针 - [ - 指针指向5元素数组 - int - 数组元素为int

 

  int (*(*func)(int *p))[5];

  分析: func - * - func是指针 - ( - 是函数指针 - * - 函数返回值为指针 - [ - 指针指向5元素数组 - int - 数组元素为int

转载于:https://www.cnblogs.com/keyblade/p/3681857.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值