其实在正儿八经学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 总结的更多相关文章

  1. 19-typedef

    本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...

  2. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  3. typedef

    第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...

  4. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  5. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  6. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  7. C及C++中typedef的简单使用指南

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...

  8. [转]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  9. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  10. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

随机推荐

  1. [置顶] SQL日期类型

    在做机房收费系统的时候,上下机,我觉得是我在整个系统中遇到最棘手的问题了,现在就给大家,分享一下,我是怎样解决的. SQL中有3中数据类型是关于日期的,每一种的用法是不同的,当你用错了,就会出现下面这 ...

  2. Git基础 1 ---- 版本控制系统的介绍

    1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...

  3. 【Java】【Fulme】Flume-NG源代码阅读之SpoolDirectorySource

    org.apache.flume.source.SpoolDirectorySource是flume的一个经常使用的source,这个源支持从磁盘中某目录获取文件数据.不同于其它异步源,这个源可以避免 ...

  4. 浅谈PHP技术应用

    序号:1210-41 黑龙江省高等教育自学考试 本科毕业论文 题    目    浅谈PHP技术 学员姓名    夏滟 专    业    计算机及应用 准考证号    010311192585 指导 ...

  5. SharePoint代码段设计

    参考文章: 1. SharePoint 2013设计管理器代码段 https://msdn.microsoft.com/zh-cn/library/jj822367 2. 如何在SharePoint中 ...

  6. JavaSE学习总结第07天_面向对象2

      07.01 成员变量和局部变量的区别 1.在类中的位置不同 成员变量    类中方法外 局部变量    方法内或者方法声明上 2.在内存中的位置不同 成员变量   堆内存 局部变量   栈内存 3 ...

  7. LNMP一键安装结果

    ============================== Check install ============================== Checking ... Nginx: OK M ...

  8. hdoj 1013

    比较坑的一道题...直接做肯定WA http://acm.hdu.edu.cn/showproblem.php?pid=1013 #include<iostream> #include&l ...

  9. WPF:使用Json.NET在TreeView中树形显示JSON数据

    原文 WPF:使用Json.NET在TreeView中树形显示JSON数据 据 读者可以参考这个开源的可以树形显示XML和JSON的工具: Mgen Object 603:XML/JSON树形显示小工 ...

  10. 「数据结构」:模拟指针(simulated pointer)

    模拟指针,也就是清华严老师<数据结构-C语言描述>中的静态链表,静态链表的引用是使用一段连续的存储区还模拟指针的功能,可以有效的利用一段连续内存进行一定范围内可变的子链表的空间分配,此数据 ...