文档章节

typedef和define的区别

DragonRiver2015
 DragonRiver2015
发布于 2014/05/22 09:48
字数 551
阅读 113
收藏 11

1:typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令.

1.1:typedef功能是用户为已有数据类型取别名。

1.2:用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。例如:

typedef int a[10];//表示a是整型数组类型,数组长度为10。

a s1,s2;//完全等效于:int s1[10],s2[10] ; 


#define是C中定义的语法,typedef是C++中定义的语法,二者在C++中可以通用,但#define成了预编译指令typedef当成语句处理。Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。

1:二者执行时间不同

关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。

Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。

2:功能不同

Typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct),可以起到使类型易于记忆的功能。 

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

3:作用域不同

#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。而typedef有自己的作域。

4:对指针的操作

二者修饰指针类型时,作用不同。

Typedef int * pint; 
#define PINT int *  
Const pint p;//p不可更改,p指向的内容可以更改,相当于 int * const p; 
Const PINT p;//p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;  
pint s1, s2; //s1和s2都是int型指针  
PINT s3, s4; //相当于int * s3,s4;只有一个是指针。









© 著作权归作者所有

DragonRiver2015
粉丝 8
博文 94
码字总数 23234
作品 0
海淀
程序员
私信 提问
iOS学习——#define、const、typedef的区别

在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define、const以及typedef。那么它们之间有什么区别呢?我们接下来一个一个具体了解下。 一...

mukekeheart
02/21
0
0
typedef和define具体的详细区别

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926...

晨曦之光
2012/03/09
257
0
typedef与#define的区别

1、typedef typedef并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类型的别名。 它是语言编译过程的一部分,但...

野渡书生
2016/04/19
42
0
【C++_typedef_疑难定义收集整理】

(注:文章谨代表个人理解,如有错误,还望尽快指正,大家都能获益,我定感激不尽^^) 至今已遇到两个typedef诡异的定义,因此决定下笔记之,以备后用。 【typedef之const指针】 【案例】 type...

技术小胖子
2017/11/10
0
0
Unix/Linux编程之size_t、ssize_t

对于赶时间的朋友,只看第一段就好了。 首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区...

长平狐
2013/06/17
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部