typedef 总结
其实在正儿八经学C语言的时候typedef用的不是很多,记得书上对它的介绍只是一笔带过。的确它的用法是很简单,但这不代表在使用的过程中不会出错,今天来个彻底的总结。
作用:用来建立新的数据类型名。(注意:这里是新的数据类型名,而不是新的数据类型)。
基本用法:
1)
typedef int Size;
将Size定义为与int具有相同意义的名字。类型Size可以用于类型声明,类型转换等,它和 int 完全相同,如:
Size size;
Size maxSize;
Size *sp;
2)
typedef char *String;
将String定义为与Char*同义,此后,则可以在类型声明和类型转换中使用String
String p; //p为指向char类型的指针
String arr[MAXLEN]; // arr为元素类型为指向char类型指针的数组
以上两种情况,很好理解,一般都不会出问题,容易出错的是下面这种情况:
3)
typedef int *pt; const pt ivar1;
pt const ivar2;
那么 ivar1 和 ivar2 的类型是什么呢?
也许有些童鞋会说 ivar1 是指向 int 常量的指针,而 ivar2 是指向 int 类型的const指针。
其实在这里 ivar1 和 ivar2 的类型是相同的,都是指向 int 类型的const指针。
之所以会把 ivar1 的类型搞错,是因为我们将 typedef 当做文本扩展了。即把 ivar1的声明当成如下形式了:
const int * ivar1;
我们应该将 (int *) 作为一个整体来看待,则不论const 在 pt 前面 还是 pt 后面 ,const 修饰的是 pt 的类型。和如下的定义是一个道理:
const int i;
int const i;
即,不论const 在 int 前面还是后面它修饰的是 int 类型。当我们把上面例子中的 int * 看做一个 整体(int *) 时,道理是一样的。
注:3)中的类比只是用来帮助我们理解。
使用typedef 的目的 or 好处:
1) 为了时表达式更加简洁:
函数指针类型通常相当的冗长,可以用typedef 大大的简化。
typedef int (*cmpFcn)(const char *, const char *);
该定义表示cmpFcn是一种指向函数的指针类型的名字。要使用这种指针类型时只需直接使用cmpFcn即可,不必每次把整个声明都写出来。
2) 为了隐藏特定类型的实现,强调类型的使用目的
3) 允许一种类型用于多个目的,同时使得每次使用给类型的目的明确。
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 ...
随机推荐
- vs2010经常使用快捷键
调试快捷键 F6: 生成解决方式 Ctrl+F6: 生成当前项目 F7: 查看代码 Shift+F7: 查看窗口设计器 F5: 启动调试 Ctrl+F5: 開始运行(不调试) Shift+F5: 停止 ...
- java解析xml的几种方式
java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...
- Python 参数传递
python中的变量: 一个变量是局部还是全局,在编译函数的时候就已经决定,因此读变量值的时候也不会逐层向外查找.变量是全局还是局域,根据如下3条: 1. 如果函数内部有global语句,那么它声明的 ...
- 关于left join 和 inner join
今天遇到一个逻辑很复杂的SQL,虽然写出来了,但是并没有完全体会,找了找资料,算是摸清楚了left join和inner join 的实际意义. 感谢PCJIM的文章,写的非常明白,原文地址:http ...
- selenium+BeautifulSoup+phantomjs爬取新浪新闻
一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...
- linux小命令
本文主要记录了我在工作中用到的一些linux命令 1.查询linux系统是32位还是64位 zhaolei@zhaolei :~# file /usr/bin/whoami/usr/bin/whoam ...
- mongoDB用java实现增删改查
package mongo; import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mo ...
- HBase 几点思考
1. http://blog.csdn.net/yueyedeai/article/details/14648067 2. http://blog.csdn.net/pirateleo/article ...
- 关于sql 中 group by 和 having
今天看到园里一篇文章(http://www.cnblogs.com/sheldon-lou/p/4881230.html)中面试中有关sql 查询方面的问题, 想想自己从上大学就学习数据库,到后来自己 ...
- Uva 225 Golygons
这道题如果直接用Dfs,运气好的话是可以直接过的. 但如果要在Dfs的基础上加快速度,剪枝是必不可少的. 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数 ...