关于typedef的用法
参考: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的用法的更多相关文章
- [转载]typedef常见用法
注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 ...
- 详谈typedef的用法
我们都知道typedef是类型重定义,既然是重定义就不可能出现新的数据类型,只是将已有的数据类型进行换个名字而已,但是这有什么用呢?可能我们学的时候,给的例子都是:typedef int INT; 然 ...
- typedef的用法总结
typedef的用法总结 不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上, ...
- C-数据结构-typedef的用法
.typedef的用法 # include <stdio.h> typedef int zhang; //为数据类为int从新取名为zhang 等价于int typedef struct ...
- C语言typedef的用法详解
C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...
- typedef的用法 单向链表的查找、增加、删除、销毁。
一:typedef的用法. 写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常 ...
- [转]关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- C语言typedef的用法(转)
http://www.cnblogs.com/afarmer/archive/2011/05/05/2038201.html 一.基本概念剖析 int* (*a[5])(int, char*); ...
- C/C++语法知识:typedef struct 用法详解
第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...
- typedef的用法
我最开始学习的是C++,而不是C语言.虽说C++涵盖了C,但是C++的语法更加方便,比如输入输出……但是为了与C兼容,常常需要保留C语言的用法,这就比较烦人了,因为我们都希望有一个固定的语法. 首先让 ...
随机推荐
- BZOJ 2243 染色 (线段树+树链剖分)
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 9895 Solved: 3735[Submit][Status ...
- mdb
计划开发高性能KV数据库, 学习MongoDB leveldb innodb, 练手贴+日记贴: http://bbs.chinaunix.net/thread-4244870-1-1.html 超高 ...
- UT源码162
(3)设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Cellp ...
- android app启动就闪退怎么办?
开发过程中,如遇到android app启动就闪退,不要急,直接进入调试模式运行app,就会取得出错的原因. http://blog.sina.com.cn/s/blog_44fa172f0102wg ...
- IE8下window.open 二次无法加载页面
我原先的IE是系统默认自带的IE7,升级到IE8之后,就出现了此现象: 打开一个窗口(window.open方式)后,再打开时,新窗口的页面显示空白,无法加载其内容.关闭ie后,重新偿亦是如此,第一次 ...
- IOS 6 自动布局 入门
http://blog.csdn.net/itianyi/article/details/8535392
- docker容器中安装vi
容器中输入vi提示 root@e36f8029c9f2:/# vi bash: vi: command not found 解决办法: 1.通过命令获取最新的软件包 apt-get update ap ...
- JulyNovel-React
写在前面的话 目前,JulyNovel后端框架基本搭建.部署完毕,GraphQL提供的API接口也有着高可用性,数据库里也存了六七百兆爬来的小说数据,是时候开始写前端了. 框架选用 JulyNovel ...
- 用Docker自动构建纸壳CMS
纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image.我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后, ...
- JAVA程序对MYSQL数据库加锁实验
什么是脏读,不可重复读,幻读 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重 ...