typedef 定义函数类型()转
2015-12-11 14:45
260 查看
最近在看posix实时信号时,遇到一处函数是如此定义的:
在我常规理解里,一般定义一个函数类型都是这样定义的:
其实是这样的,对于函数,typedef有两类自定义类型:
首先我们要先明白一个概念,函数名是不是指针?也就是说一个函数名可不可以代表一个地址?以及什么是函数类型?
经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一样的。当调用一个函数时,我们都是直接用函数名调用,或者说通过指针调用。
函数类型,在我理解,就是定义了一个函数应该返回什么样的类型,int?void?以及它的参数形式。
那么:
1,tpyedef自定义函数指针类型:
看一个例子:
2,typedef自定义函数类型:
例子:
view
source
print?
1 | typedef void sigfunc_rt( int , siginfo_t *, void *); |
1 | typedef void (*sighandler_t)( int ); |
2 | sighandler_t signal ( int signum, |
首先我们要先明白一个概念,函数名是不是指针?也就是说一个函数名可不可以代表一个地址?以及什么是函数类型?
经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一样的。当调用一个函数时,我们都是直接用函数名调用,或者说通过指针调用。
函数类型,在我理解,就是定义了一个函数应该返回什么样的类型,int?void?以及它的参数形式。
那么:
1,tpyedef自定义函数指针类型:
看一个例子:
01 | #include <stdio.h> |
02 |
03 | typedef int (*fp_t)( char c); |
04 |
05 | int f0( char c) { printf ( "f0, c = %c\n" , c); return 0;} |
06 | int f1( char c) { printf ( "f1, c = %c\n" , c); return 1;} |
07 |
08 | int main() |
09 | { |
10 | int ret; |
11 | fp_t fp; //fp是一个指向一个函数类型(返回的是int,参数是char)的函数指针 |
12 |
13 | fp = f0; |
14 | ret = fp( 'a' );通过函数指针调用函数 |
15 |
16 | fp = f1; |
17 | ret = fp( 'x' ); |
18 | return 0; |
19 | } |
例子:
view
source
print?
01 | #include <stdio.h> |
02 |
03 | typedef int f_t( char c); |
04 |
05 | int f0( char c) { printf ( "f0, c = %c\n" , c); return 0;} |
06 | int f1( char c) { printf ( "f1, c = %c\n" , c); return 1;} |
07 |
08 | int main() |
09 | { |
10 | int ret; |
11 | f_t *fp; //f_t是函数类型,所以fp是指向此函数类型的指针 |
12 |
13 | fp = f0; |
14 | ret = fp( 'a' ); |
15 |
16 | fp = f1; |
17 | ret = fp( 'x' ); //函数指针调用此函数 |
18 | return 0; |
19 | } |
相关文章推荐
- poi 导出excel
- js判断接入设备
- Upload large file in background (service restarting when the app closed)
- mac+virtualbox+ubuntu 增加ubuntu硬盘空间
- 统计元音字母
- Android 多渠道打包原理和使用
- Eclipse中最有用的快捷键组合
- sap 教程编号
- css属性书写顺序
- 【Mysql】主从环境搭建步骤详解
- 简单的网络协议介绍
- OC_多态
- C/C++常用算法【C语言顺序查找(随机数)】【1】
- ERROR: Application requires API version 19. Device API version is 17 (Android 4.2.2).
- C/C++常用算法【C语言顺序查找(随机数)】【1】
- 心算 进制转换 心得 =》 任意进制的数 转 任意进制的数
- 对抗警报疲劳的七个步骤!
- Node.Js简介与安装
- iOS开源项目大全(二)(整理自网络)
- 黑马程序员——反射