typedef使用
1、利用typedef定义函数指针
代码简化,促进跨平台开发
typedef行为有点类似#define 宏,用其实际类型替代同义字。
不同点:typedef 在编译时被解释,因此让编译器来 应付超越预处理器能力的文本替换;
用法一:
typedef int (* func)(int, int);-----------这种用法一般用在给函数定义别名的时候;
形式:typedef 返回值类型 (*函数别名)(参数列表)
上面的例子定义func 是一个函数指针, 函数类型是:参数为两个int, 返回值为:int
分析方法如下:
先去掉typedef和别名,剩下的就是原变量的类型。
如:int (*func)(int , int )
char (*pFun)(int); //定义了一个指针变量pFun,它是一个指向某种函数的指针,这种函数参数是一个int类型。
//只有这一句我们还无法使用这个指针,因为我们还没对它进行赋值
char glFun(int a){return ;} //定义量一个函数glFun(),该函数正好是一个以int为参数返回char的函数,
//我们从指针的层次上理解函数,函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址;
int main()
{
pFun = glFun;
(*pFun)(2);
return 0;
}
用法二:
typedef 给变量类型定义一个别名:
typedef struct{
int id;
char name[10];
}mystruct;
这里把一个还未命名的结构体直接取了一个mystruct的别名。
这样如果定义结构体的实例可以这样:
mystruct tmp;
#include <stdio.h>
typedef int (*FP_CALC)(int, int);
int add(int a, int b)
{
return a + b;
} int sub(int a, int b)
{
return a - b;
} int mul(int a, int b)
{
return a * b;
} int div(int a, int b)
{
return b?a/b:-;
} //定义一个函数,参数是op,返回值是一个函数指针,
//该函数指针类型:参数是2个int, 返回值是int
//该函数的作用是根据操作符返回对应函数的地址;
FP_CALC calc_func(char op)
{
switch (op)
{
case '+': return add; //返回地址
case '-': return sub;
case '*': return mul;
case '/': return div;
default:
return NULL;
}
return NULL;
} //s_calc_func为函数,参数是op;
//返回值为一个拥有 两个int参数,返回类型为int的函数指针
int (*s_calc_func(char op))(int, int)
{
return calc_func(op);
} //最终用户直接调用的函数,该函数接收两个int整数,和一个算术运算符,返回两数的运算结果
int calc(int a, int b, char op)
{
FP_CALC fp = calc_func(op); //根据预算得到各种运算的函数地址;
int (*sp)(int, int) = s_calc_func(op); //用于测试;
// ASSERT(fp = sp); //设置断言
if(fp) return fp(a, b); //根据上一步得到的函数的地址调用相应函数,并返回结果
else return -;
} int main()
{
int a = , b = ;
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));
printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));
return ;
}
typedef使用的更多相关文章
- 19-typedef
本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...
- #define与typedef在重定义类型中的区别
#define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...
- typedef
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...
- 用typedef定义函数指针的问题
在学习windows API的时候,遇到下面这段代码 以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName 这种给数据类型 ...
- C语言语法 typedef小结
在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- C及C++中typedef的简单使用指南
又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...
- [转]关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- typedef 和 #define 的区别
本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...
- [转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
随机推荐
- Python的编码规范(PEP 8 & Google Python guide)
PEP 8 Python 代码规范整理 click here Goole Python 风格指南 中文版 click here 大家有取舍的看吧. 因为文章不是原创的,所以只贴地址,给大家造成麻烦了, ...
- Matlab插值计算各时刻磁法勘探日变观测值
Matlab插值计算各时刻磁法勘探日变观测值 在磁法勘探中,消日变影响的改正称为日变改正.进行日变改正时必须设立日变站,观测日变情况.根据日变数据和测点观测时间,对观测数据进行改正. 在本次磁法实习中 ...
- CSS自学笔记(2):CSS语法
CSS的语法规则主要有两个分构成选择器和声明(声明问一条或者多条). selector {declaration1; declaration2; ... declarationN } 选择器(selc ...
- SQL Server 一些重要视图3
1. sys.dm_tran_locks; 为每一把锁返回一行.request_session_id 可以与sys.dm_tran_session_transactions \sys.dm_exec_ ...
- openNebula rgister img instance vms error collections
1, 注册镜像报错信息 ERROR="Fri Nov 21 12:57:17 2014 : Error copying image in the datastore: Not allowed ...
- Data Visualization 课程 笔记2
2-D Graphics vector graphics : the graphics that used for drawing shapes with vertices, strokes and ...
- 一个神奇的bug
在使用touch命令创建了一个swift文件后,如果用xcode打开该文件,然后输入 #!/usr/bin/env xcrun swift 接着你就会发现,xcode崩溃了.
- 利用虚拟光驱实现 将WINDOWS文件供虚拟机中的UBUNTU共享
此方法只能实现(至少目前我发现只能这样)将文件传递给虚拟机中的ubuntu 中,供ubuntu系统阅读,拷贝等,但不能将ubuntu中的数据传递给windows. 即:每次更新windows的数据到u ...
- c语言函数---M
书画小说软件 制作更满意的读.更舒心的写.更轻松的公布 最全古典小说网 由本软件公布所得 main()主函数 每一C 程序都必须有一main()函数, 能够依据自己的爱好把它放在程序的某 个地方.有些 ...
- 转载:JS触发服务器控件的单击事件
原文地址:http://blog.csdn.net/joyhen/article/details/8485321 <script src="../Js/jquery-1.4.2.min ...