今天看到 typedef与define的区别 上网搜了一下 总结一下 大部分内容出自百度知道,自己理解后又添了点。如发现不对,留言,大家一起研究一下

typedef int * pint ; #define PINT int * 

那么: const pint p ;//p不可更改,但p指向的内容可更改 const PINT p ;//p可更改,但是p指向的内容不可更改。
1.#define傻子一样的替换:
#define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。

#define PINT int* 就是把所有的词 PINT 替换成 int * ,替换完毕再编译。 
#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预处理也照样带入。 
2.typedef是在编译时处理,已经是一个完整的类型
   它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。
 
3.typedef int * int_ptr; 与 #define int_ptr int * //注意一个有分号的,有分号就是一条语句,

作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说; 

//refer to (xzgyb(老达摩)) #define int_ptr int * int_ptr a, b; //相当于int * a, b; 只是简单的宏替换 ,注意:根据*的运算优先级 *与a先结合 相当于:int (* a);

typedef int* int_ptr; int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符 ,*号与int已经为一个整体 相当于:(int *) a;

这也说明了为什么下面观点成立 //QunKangLi(维护成本与程序员的创造力的平方成正比) typedef int * pint ; #define PINT int * 

typedef int* pint; 是语句,由编译器在编译过程中编译处理。(int*) x; 和pint x; 的声明是等价的

typedef int* pint;long int* x; 声明是可以的,但long pint x; 不可以。

#define PINT int* long int* x; 声明是可以的,long PINT x; 也是可以的。从上两种情况对比,你就知道两者的区别
typedef int * pint ; #define PINT int * 

那么: const pint p ;//p不可更改,但p指向的内容可更改 const PINT p ;//p可更改,但是p指向的内容不可更改。
long,short,signed,unsigned 叫 “Modifiers”

const,volatile 叫 “Qualifiers"

const pint p; 锁定 pint 类型,相当于:const (int *) p ,p是个指针,锁定初始化后的指针地址。
pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改 

const PINT p; 预处理为const int (* p);  显然是锁定的(* p),SO锁定初始化后的指针指向的值。
3.千万注意:也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。

转载于:https://www.cnblogs.com/hyp5490-/p/3750360.html

typedef与define 傻傻的分不清楚相关推荐

  1. typedef与#define宏区别

    先让我们了解一下typedef的功能,typedef简单来说就是给类型取一个别名: 如 typedef int New   那么int就有一个别名叫New了,以后size就和int这个类型一共用法了. ...

  2. C语言 typedef 和 #define详解

    类型定义 (typedef) 摘自 <C程序设计语言>6.7节 C语言提供了一个称为typedef的功能,它用来建立新的数据类型名,例如,声明 typedef int Length; 将L ...

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

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

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

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

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

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

  6. typedef VS #define —— C语言中的 关键字 与 C指令

    *******************************************typedef************************************************** ...

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

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

  8. typedef和define一些问题

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

  9. 你还傻傻的分不清“和服和浴衣吗?

    夏季是日本各种民族风情活动最多的时候,就会经常看到街上漂亮的穿着传统服装的女生.但是你又知不知道它到底是和服呢还是浴衣呢?如果你还傻傻的分不清楚,那就跟着小编来一探究竟吧! 和服 是 正式场合外出时穿 ...

  10. typedef 与 define

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

最新文章

  1. matlab中find函数的使用说明
  2. Linux笔记16.磁盘管理
  3. 清理系统垃圾的快捷方法
  4. UTF-8和BOM的一些说明
  5. CodeForces 351A Jeff and Rounding
  6. prd展示html文件,prd目的.html
  7. android 评分条 RatingBar 使用及自定义
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_16maven工程servlet实例之jar包冲突...
  9. 计算机网络技术ui设计,UI设计小白到大神的进阶之路—入门基础篇
  10. 英语语法学习--名词
  11. 不得不会的linux账号与权限管理
  12. 【华为OD机试真题 JS】竖直四子棋
  13. 向量线性无关和正交及其关系
  14. 保研浙大直博学姐亲身经验 浙大计算机夏令营 浙大计算机九推
  15. 今天是大四的第一天,感觉自己特别的慌,在秋招的路上我一个人单枪匹马,在这里我将记录我的历程。
  16. 三天打鱼两天晒网python
  17. linux command line 利用Entrez Direct下载NCBI数据
  18. QT+ObjectARX 2022
  19. 如何看待服装订单外流现象?
  20. 【firefox】最新浏览器无法添加组件firebug和firepath的方法

热门文章

  1. 比肩Sci-hub的论文下载神器——Library Genesis
  2. 办公小技巧:excel重复项怎么找出来?
  3. Linux 中 $符号是什么意思,代表什么含义
  4. 【Error】Win10/Python3.9安装dlib报错:subprocess.CalledProcessError以及解决方法
  5. PDCA循环和GTD时间管理
  6. 华为网络计算机登陆,华为路由器如何登录192.168.3.1入口设置界面
  7. HTML 内容保存到word文档(angular4调用第三方js插件实现)
  8. C++软件调试与异常排查从入门到精通系列汇总
  9. java 通过身份证判断性别
  10. 大数据求中位数(插值计算)