typedef void(*Func)(void)的简单用途
2016-01-16 13:15
225 查看
博文中如有从网上摘抄,截取信息与片段,如有版权问题,请联系:Email:king1062373518<AT>163<DOT>com.
博文中出现错误,请及时指出.技术交流:QQ:1062373518.
版权声明:本文为博主原创文章,未经博主允许不得转载.
郑重声明:本人不对使用文中技术造成的后果负责.
[wenfu.]
本文希望解决以下问题:
1、typedef 的基本概念
2、函数指针的基本概念
3、typedef void(*Func)(void)的由来
4、typedef void(*Func)(void)的用途
题外话:跟typedef有个很类似的关键字时#define,两者其实是有区别的,这里就不详细说,只做简单阐述
typedef语句是在编译过程中被解析的,而#define是在编译之前的预处理过程中被解析的。#define所进行的只是对自定义别名的简单替换,而typedef则要灵活得多。总的来说,typedef可以做到#define所能做的所有事情,而且可以做得更好,但是两者是不一样的,详细区别请自行百度。
正式内容:
1、 typedef---声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。
基本用法:
typedef unsigned char UCHAR;
右边代替左边
使用UCHAR i语句就等同于unsigned char i;
2、函数指针的基本概念
说到函数指针,必然会提到指针函数,简单阐述,也可自行百度.
1)指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
类型标识符 *函数名(参数表)
int *f(x,y);/* 声明一个指针函数 */
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
表示:
float *fun();
float *p;
p = fun(a);
2)函数指针是指向函数的指针变量,他的本质是一个指针变量。
类型说明符 (*函数名)(参数)
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。
其主要的区别是一个是指针变量,一个是函数。
3、typedef void(*Func)(void)的由来
其实这样的形式声明函数指针是有”问题”的。如果仿照变量类型声明,声明函数指针似乎应该这样:typedef void(*)() variable;
但是c标准的创建者没有这样做,不知道为什么,而选择了这样的声明:
typedef void(*variable)();
C编译器非常清楚,这就是在声明一个void(*)() 类型的函数指针variable。
4、typedef void(*Func)(void)的用途
先来看下其基本用法
typedef void (*func)(void);
void myfunc(void);
func pfun = myfunc;/*赋值*/
pfun();/*调用*/
typedef void(*Func)(void)的用途
用法的好处:
定义一个函数指针类型。
例子:
有三个类型相似或功能相似的函数:
void TASK1(void) { printf("I’m TASK1"); }//函数定义
void TASK2(void) { printf("I’m TASK2"); }//函数定义
void TASK3(void) { printf("I’m TASK3"); }//函数定义
... ...
typdef void (*func)(void);//声明
至此,我们就已经构造好了通用函数
还需要定义一个调用的函数
void gTASK(char i)
{
func vTask[3] = {&TASK1, &TASK2, &TASK3};
func fun = vTask[i];
(*fun)();
}
使用gTASK来执行:
执行gTASK(1)会打印出 I’m TASK1
执行gTASK(2) 会打印出I’m TASK2
执行gTASK(3) 会打印出I’m TASK3
PS:typdef void (*func)(void);还有很多好的用处,操作系统源码都用的很巧妙,有空我总结出来,再分享。
本文结束![wenfu]
博文中出现错误,请及时指出.技术交流:QQ:1062373518.
版权声明:本文为博主原创文章,未经博主允许不得转载.
郑重声明:本人不对使用文中技术造成的后果负责.
[wenfu.]
本文希望解决以下问题:
1、typedef 的基本概念
2、函数指针的基本概念
3、typedef void(*Func)(void)的由来
4、typedef void(*Func)(void)的用途
题外话:跟typedef有个很类似的关键字时#define,两者其实是有区别的,这里就不详细说,只做简单阐述
typedef语句是在编译过程中被解析的,而#define是在编译之前的预处理过程中被解析的。#define所进行的只是对自定义别名的简单替换,而typedef则要灵活得多。总的来说,typedef可以做到#define所能做的所有事情,而且可以做得更好,但是两者是不一样的,详细区别请自行百度。
正式内容:
1、 typedef---声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。
基本用法:
typedef unsigned char UCHAR;
右边代替左边
使用UCHAR i语句就等同于unsigned char i;
2、函数指针的基本概念
说到函数指针,必然会提到指针函数,简单阐述,也可自行百度.
1)指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
类型标识符 *函数名(参数表)
int *f(x,y);/* 声明一个指针函数 */
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
表示:
float *fun();
float *p;
p = fun(a);
2)函数指针是指向函数的指针变量,他的本质是一个指针变量。
类型说明符 (*函数名)(参数)
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。
其主要的区别是一个是指针变量,一个是函数。
3、typedef void(*Func)(void)的由来
其实这样的形式声明函数指针是有”问题”的。如果仿照变量类型声明,声明函数指针似乎应该这样:typedef void(*)() variable;
但是c标准的创建者没有这样做,不知道为什么,而选择了这样的声明:
typedef void(*variable)();
C编译器非常清楚,这就是在声明一个void(*)() 类型的函数指针variable。
4、typedef void(*Func)(void)的用途
先来看下其基本用法
typedef void (*func)(void);
void myfunc(void);
func pfun = myfunc;/*赋值*/
pfun();/*调用*/
typedef void(*Func)(void)的用途
用法的好处:
定义一个函数指针类型。
例子:
有三个类型相似或功能相似的函数:
void TASK1(void) { printf("I’m TASK1"); }//函数定义
void TASK2(void) { printf("I’m TASK2"); }//函数定义
void TASK3(void) { printf("I’m TASK3"); }//函数定义
... ...
typdef void (*func)(void);//声明
至此,我们就已经构造好了通用函数
还需要定义一个调用的函数
void gTASK(char i)
{
func vTask[3] = {&TASK1, &TASK2, &TASK3};
func fun = vTask[i];
(*fun)();
}
使用gTASK来执行:
执行gTASK(1)会打印出 I’m TASK1
执行gTASK(2) 会打印出I’m TASK2
执行gTASK(3) 会打印出I’m TASK3
PS:typdef void (*func)(void);还有很多好的用处,操作系统源码都用的很巧妙,有空我总结出来,再分享。
本文结束![wenfu]
相关文章推荐
- 关于指针的一些事情
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程