#define和typedef的比较
1:typedef是声明新的类型名,使用新的类型名代替原有的类型名,
而且typedef是在编译的时候有用,所以会进行类型的检测。
而#define是在预编译的时候进行简单的宏替换,所以不会进行检测。
2:对待指针时的不同
例如:
#define int* Pi;Pi a,b;的意思是定义了一个指向整形的指针和第一了一个整形指针。
typedef PI int*;PI a,b;的意思是定义了两个都指向整形的指针。
由此可见,#define是一种替换,而typedef包含了一种类型,具有整体“封装”的作用。
3:末尾的不同
typedef定义时后面必须有分号,但#define后面如果是类型的话,加分号就会出错,如果是一条语句的话,就会当做一个空语句来实行。
4:定义时的顺序不同
#define定义时是替换量在前面,而typedef替换时是替换量在后面。
5:#define不仅可以定义类型取别名,而且可以定义常量和变量。
1:typedef是声明新的类型名,使用新的类型名代替原有的类型名,
而且typedef是在编译的时候有用,所以会进行类型的检测。
而#define是在预编译的时候进行简单的宏替换,所以不会进行检测。
2:对待指针时的不同
例如:
#define int* Pi;Pi a,b;的意思是定义了一个指向整形的指针和第一了一个整形指针。
typedef PI int*;PI a,b;的意思是定义了两个都指向整形的指针。
由此可见,#define是一种替换,而typedef包含了一种类型,具有整体“封装”的作用。
3:末尾的不同
typedef定义时后面必须有分号,但#define后面如果是类型的话,加分号就会出错,如果是一条语句的话,就会当做一个空语句来实行。
4:定义时的顺序不同
#define定义时是替换量在前面,而typedef替换时是替换量在后面。
5:#define不仅可以定义类型取别名,而且可以定义常量和变量。
那么#define和函数有什么不同那。
1:函数有他的格式,对于他的参数必须有一个类型,但是用#define就可以来定义与类型无关的。
例如:#define malloc(n,type
) ((type*)malloc((n)*sizeof(type)))
pi=malloc(3,int)=((int*)malloc((3)*sizeof(int)))是不是方便很多。
2:从空间和时间来说,#define在预编译的时候就进行了替换,但是它要替换代码里面的每一行,所以,它有点拿空间换时间的感觉,而函数在调用的时候为它分配空间,结束的时候释放了,所以空间是固定的,不会改变,但是分配空间和回收空间要话费时间。