宏定义#define和类型定义typedef区别
2017-05-24 20:57
351 查看
先用我的话简单介绍一下:
宏定义就相当于替换,在预编译时进行替换,编译时候所有宏定义的代码改变为被替换的代码,不限制任何代码,都可以进行宏定义;
类型定义不能简单理解为替换,可以这样理解,这相当于给原来的所定义的类型,一个全新的名字,以后这个名字就代表u俺来的类型;
用代码解释如下:
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这也说明了为什么下面观点成立
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。
pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象
这就可以说明
#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。
宏定义就相当于替换,在预编译时进行替换,编译时候所有宏定义的代码改变为被替换的代码,不限制任何代码,都可以进行宏定义;
类型定义不能简单理解为替换,可以这样理解,这相当于给原来的所定义的类型,一个全新的名字,以后这个名字就代表u俺来的类型;
用代码解释如下:
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这也说明了为什么下面观点成立
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。
pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象
这就可以说明
#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。
相关文章推荐
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
- #define 宏定义 与 typedef 类型定义
- typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
- typedef 和#define定义别名的区别
- #define与typdef在类型定义中的区别
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- typedef 和#define定义别名的区别
- 宏定义#define,Typedef的区别和用法
- 宏定义 #define与typedef的区别。
- Object-C学习(五):结构体(struct)、typedef、以及与#define宏定义的区别
- typedef和#define的定义与区别
- typedef 和#define定义别名的区别
- 宏(#define)和类型别名(typedef)在结构和共用体(联合体)类型定义中的应用
- iOS Objecttive-C语言 定义常量的几种方式与区别 static const 定义常量 少用#define预处理指令 多用类型常量
- 宏定义#define和typedef的区别和典型范例题目辨析
- 宏定义(const)和常量定义(#define)的区别
- 结构标签(struct tag)与类型定义(typedef)的区别
- typedef定义的struct类型与struct定义的结构体变量在使用上的区别
- enum和typedef 与#define宏定义的区别