C语言声明的优先级规则
2015-08-03 21:37
399 查看
图为《C专家编程》的第三章,写的很好,有了这个规则再也不用担心指向常量的指针、常指针、指向常量的常指针傻傻分不清楚了
实例二:
void (*signal (int sig, void(* func) (int))) (int);
首先剥离参数,变为:
void (*signal ( )) (int)
根据上面规则,从signal开始读,
然后是B.2,signal后面有(), 可知signal是一个函数,剥离函数signal()后可知它的返回值是一个函数指针void (* )(int ) ,该函数指针的返回值为void,参数为int。
而(int sig, void(* func) (int)部分为signal函数的参数。确实有点复杂
如果还是不理解,可以参考函数指针和函数声明:
函数指针声明:void (*pfun) (int);
函数生命 void fun(); 返回值为void,若想返回函数指针,则用fun()替换pfun---> void (* fun()) (int);这样是不是好理解一些。
若使用typedef定义一下: typedef void (*pfun)(int)
那么复杂的void (*signal (int sig, void(* func) (int))) (int);就变为了pfun signal(int pfun);既好理解有方便书写
嗯,以后写函数指针的时候可以考虑使用typedef
实例二:
void (*signal (int sig, void(* func) (int))) (int);
首先剥离参数,变为:
void (*signal ( )) (int)
根据上面规则,从signal开始读,
然后是B.2,signal后面有(), 可知signal是一个函数,剥离函数signal()后可知它的返回值是一个函数指针void (* )(int ) ,该函数指针的返回值为void,参数为int。
而(int sig, void(* func) (int)部分为signal函数的参数。确实有点复杂
如果还是不理解,可以参考函数指针和函数声明:
函数指针声明:void (*pfun) (int);
函数生命 void fun(); 返回值为void,若想返回函数指针,则用fun()替换pfun---> void (* fun()) (int);这样是不是好理解一些。
若使用typedef定义一下: typedef void (*pfun)(int)
那么复杂的void (*signal (int sig, void(* func) (int))) (int);就变为了pfun signal(int pfun);既好理解有方便书写
嗯,以后写函数指针的时候可以考虑使用typedef
相关文章推荐
- 关于指针的一些事情
- Lua和C语言的交互详解
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C++智能指针实例详解
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考