• 先让我们了解一下typedef的功能,typedef简单来说就是给类型取一个别名

    如  typedef int New   那么int就有一个别名叫New了,以后size就和int这个类型一共用法了。

     但如果仅仅认为typedef是把第一个参数(类型名)等同于第二个参数就太单纯了,他还有更复杂化的用法:

    typedef char LINE[81] 它真的含义是LINE代表了81个元素的字符数组;那么 LINE t 就等同于char t[81];

     还可以举一个函数指针的例子,如下:

1 typedef int (*func_ptr)(int,int);  //typedef行
2
3 int (*fp)(int,int);  //原型行
4 func_ptr fp;         //应用行,与原型行实现的功能完全一样

    首先,“typedef行”和“原型行”相比较,前者仅仅多了一个typedef而已;就函数指针的例子而言,他们俩的根本区别在于func_ptr是类的别名,fp是这个类一个具体的变量。

    其次,“应用行”和“原型行”编译结果是完全一样的。就函数指针而言,他们都是创建了一个类型为 int (*)(int,int)的函数指针fp。可是func_ptr fp  比   int (*fp)(int,int) 形式更

    加简单,便于书写和理解。形势越复杂,typedef的优势越明显。


  • typedef与#define宏区别

  与typedef不同,#define只是单纯的替换,,替换发生在预编译的过程,此时可以吧#define的每个参数看成一堆字母,#define只是将一堆字母傻傻的用领一堆字母替换。

#define dpChar char *
typedef char * tpChar;
dpChar p1,p2;
tpChar p3,p4;

  这么里貌似#define和typedef想干的都是同一件事——用一个新的名字替换点 char *;首先要注意书写顺序上,两者还是有区别的,#define是将新定义的名词变量放在

  第一个参 数,把已有的参数或者类型名放于后面第二个参数,其实这个也很好连向,以前定义数学符号π时常用   #define PI 3.14159  来进行声明。

  我们再来看结果:dpChar是#define定义的,按照替换原则,替换结果为 char *p1,p2;等价于定义了char *p1;char p2;此时p1是char *类型,p2是char类型

  tpChar是typedef给char *取的别名,此时定义出的p3、p4类型都是char *

  

  

转载于:https://www.cnblogs.com/Higgerw/p/9850135.html

typedef与#define宏区别相关推荐

  1. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  2. C语言-typedef与#define的区别

    目录 1 typedef 1.1 将复杂的声明简单化 1.2 定义平台无关的类型 1.3 与struct的结合使用 1.4 typedef使用公式 2 typedef与#define的区别 2.1 执 ...

  3. C语言typedef与#define的区别

    typedef和#define define 没有参加编译,在预处理的时候就被替换掉了. typedef参加编译和链接.typedef是重命名,可以为枚举结构体等等重新命名,提高代码整洁. 一.typ ...

  4. typedef和define的区别

    typedef和define都能够对一个类型起新的别名,但这两者有一些不同之处:首先,typedef是在编译时完成的,define是在预处理时完成的:其次,先看比如进行如下定义: #define ch ...

  5. typedef和define具体的详细区别

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

  6. typedef和#define的用法与区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  7. c语言中define变量类型,C语言中typedef和define有什么区别

    typedef和define的区别有:define是预处理编辑器,可定义宏存在被替换的的可能性而typedef是由编辑器处理的,并且遵循范围规则,可用作定义类型别名 #define是一个C指令,它也是 ...

  8. c语言错误c4430,C 语言 typedef 与 #define 比较

    Alvin typedef 与 #define 的区别 1. 执行时间不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能. #define 则是宏定 ...

  9. typedef和define一些问题

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

最新文章

  1. 程序员的杂想-不要只做一名程序员
  2. 表变量是什么_为什么要使用二级指针?
  3. Hyperledger Fabric 核心模块(7)Fabric-ca-client
  4. 一款WP小游戏代码分享
  5. C++调用python(C++)
  6. Android Studio环境搭建
  7. 关于ViewPager的适配器之——pagerAdapter加载缓存页面的机制
  8. 在银行存款被吞了,怎么能快速解决?
  9. 三菱socket通信实例_三菱自动化产品相关知识整理汇总
  10. CSS 属性篇(七):Display属性
  11. Knowing is not enough; we must apply. Willing is not enough; we must do.
  12. web服务器mysql日志分析
  13. 计算机版的微信的功能是什么,计算机上的微信有没有收藏功能?电脑端如何打开微信收藏?...
  14. 硕士毕业论文框架怎么搭建?
  15. 视频添加背景音乐ffmpeg(十八)
  16. h5加java棋牌_Html5斗地主棋牌架设Canvas实现斗地主游戏代码解析
  17. 三坟五典八索九丘四书五经
  18. MacBook Pro 13 A1502 更换电池
  19. 计算机网络这么多,开发怎么理解五层网络结构体系好?
  20. 【附源码】计算机毕业设计SSM小区住户信息管理系统

热门文章

  1. WebView的截屏实现
  2. Google服务完整清单
  3. 关于 element 的 backToTop
  4. 【转】gcc 编译使用动态链接库和静态链接库
  5. UIBarButtonSystemItem 各种款式
  6. 【环境】VS2013和MATLAB相互调用混合编程
  7. 「操作系统」《自己动手写操作系统》1.1前期准备工作
  8. Android_Sqlbrite入门使用
  9. 安卓高手之路之PackageManagerservice(二)
  10. Java byte 踩坑基础