参考:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html

   https://wenda.so.com/q/1471668835727989?src=9999&cid-pre=1000204

typedef在简单的别名用法中经常用来和#define比较。

以下参考《C语言内核解析》3.9.5小节及4.6节:

#define与typedef都可以用来给现有类型起别名。#define只是简单宏替换,在预编译时被处理。typedef不是简单替换,它具有语义分析,是一种存储类的关键字,用来为复杂的声明定义简单的别名。

简单应用中的区别

#define和typedef写法的区别在于:#define原型在后,别名在前  typedef原型在前,别名在后

区别一:#define简单替换,typedef不是

#define dpchar char *;

typedef char * tpchar;

dpchar p1,p2;    //只是简单的替换,等价于 char *p1,p2;只有p1才是指针变量

tpchar p1,p2;    //不是简单的替换,等价于 char *p1,p2;p1,p2都是指针变量

区别二:#define可实现类型组合,typedef不行

#define dint int;

typedef int tint;

unsigned dint p1,p2;  //正确,等价于unsigned int p1,p2

unsigned tint p1,p2;  //不可以

区别三:typedef可以组建新类型,但是#define不行

typedef char[200] charBuf;

charBuf buf;      //等价于char buf[200],但是#define不行

typedef的复杂用法

数据结构组合

typedef char Line[81]  Line类型代表具有81个元素的字符数组。Line t 就等同于char t[81]。参考https://wenda.so.com/q/1471668835727989?src=9999&cid-pre=1000204

函数指针

typedef  int  (*fun_ptr)(int,int);  //typedef行

int     (*fp)(int,int);        //原型行

fun_ptr   fp;            //应用行

“typedef行”和“原型行”相比,“typedef行”仅仅多个typedef,根本区别在于,fun_ptr是类的别名,fp是该类的变量。“原型行”和“应用行”的编译结果是一样的。他们都是创建了一个类型为int(*)(int,int)的函数指针fp。只是应用行比原型行这种形式更加简洁,便于书写和理解。

形式越复杂,typedef的优势就越明显。

typedef和struct

typedef和struct组合是常见用法

C语言中struct普通用法:struct node n;

配合typedef:

1、利用结构体类型申请变量时就可以省略掉struct这个关键字。

typedef struct node  //给struct node{ }类型取别名

{

}Node;

Node  n;     //利用结构体类型申请变量

2、使用typedef一次定义两个类型,分别是结构体类型和结构体指针类型

typedef struct node

{

} Node,*pNode;

其中Node为结构体类型,pNode是结构体指针类型。

typedef与const

1、typedef int *PINT;

   const PINT p2;

相当于是int *const p2;

2、typedef int *PINT;

   PINT const p2;

相当于是int *const p2;

3、const int *p写成

  typedef const int *CPINT;

  CPINT p;

使用typedef的两个重要意义:(1)简化类型,让程序更易理解和书写。 (2)创造平台无关类型,便于移植【写不同的平台时定义相同别名】

关于typedef的用法的更多相关文章

  1. [转载]typedef常见用法

    注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 ...

  2. 详谈typedef的用法

    我们都知道typedef是类型重定义,既然是重定义就不可能出现新的数据类型,只是将已有的数据类型进行换个名字而已,但是这有什么用呢?可能我们学的时候,给的例子都是:typedef int INT; 然 ...

  3. typedef的用法总结

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

  4. C-数据结构-typedef的用法

    .typedef的用法 # include <stdio.h> typedef int zhang; //为数据类为int从新取名为zhang 等价于int typedef struct ...

  5. C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  6. typedef的用法 单向链表的查找、增加、删除、销毁。

    一:typedef的用法.    写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常 ...

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

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

  8. C语言typedef的用法(转)

    http://www.cnblogs.com/afarmer/archive/2011/05/05/2038201.html 一.基本概念剖析 int* (*a[5])(int, char*);    ...

  9. C/C++语法知识:typedef struct 用法详解

    第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...

  10. typedef的用法

    我最开始学习的是C++,而不是C语言.虽说C++涵盖了C,但是C++的语法更加方便,比如输入输出……但是为了与C兼容,常常需要保留C语言的用法,这就比较烦人了,因为我们都希望有一个固定的语法. 首先让 ...

随机推荐

  1. [干货来袭]C#7.0新特性(VS2017可用)(转)

    出处:http://www.cnblogs.com/GuZhenYin/p/6526041.html 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.N ...

  2. CodeForces 540B School Marks (贪心)

    题意:先给定5个数,n,  k, p, x, y.分别表示 一共有 n 个成绩,并且已经给定了 k 个,每门成绩 大于0 小于等于p,成绩总和小于等于x, 但中位数大于等于y.让你找出另外的n-k个成 ...

  3. [转][译] 存储引擎原理:LSM

    原译文地址:http://www.tuicool.com/articles/qqQV7za http://www.zhihu.com/question/19887265 http://blog.csd ...

  4. VS2010 solution中完美的相对路径引用方法

    假设您有一个工程叫solar,路径结构是这样的: 公用头路径: d:\solar\public\include公用库路径:d:\solar\public\libmars项目 : d:\solar\ma ...

  5. Windows GDI绘图基础知识

    一.Windows可以画直线.椭圆线(椭圆圆周上的曲线)和贝塞尔曲线.////////////7 个画线函式是:(1)画直线LineTo    BOOL LineTo(HDC hdc,int nXEn ...

  6. ibatis 参数之 String

    <select id="query_cust_name" resultClass="_custForm" parameterClass="Str ...

  7. oracle数据库sqlldr命令的使用

    将数据导入 oracle 的方法应该很多 , 对于不同需求有不同的导入方式 , 最近使用oracle的sqlldr命令 导入数据库数据感觉是个挺不错的技术点 .  使用sqlldr命令 将文本文件导入 ...

  8. 基于JSP的B2C的网上拍卖系统_秒杀与竞价-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 基于B2C的网上拍卖系统主要用于帮助人们应用互联网方便快捷买到自己所中意的商品,并参与到秒杀与竞拍当中.主要 ...

  9. HBase入门篇

    目录: 1-HBase的安装 2-Java操作HBase例子 3-HBase简单的优化技巧 4–存储 5(集群) -压力分载与失效转发 6 -白话MySQL(RDBMS)与HBase之间 7 -安全& ...

  10. html 线条重叠变粗

    加入属性 单元格重叠变粗 使用border-collapse:collapse;  可以解决.