------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. typedef
typedef是为数据类型起别名。
使用方式:typedef 原类型名 新类型名;
给基本数据类型起别名 eg: tepedef int myINT;
给数组起别名:typedef int ARRAY[5]; ARRAY a,b; //相当于int a[5],b[5];
给结构体起别名
struct Person{
char *name;
int age;
};
typedef struct Person p;
给枚举类型起别名:typedef enum Sex {kSexMale,kSexFemal} ISEX;
给函数指针起别名:typedef int (*FUN) (int, int); //FUN是一个别名
FUN f1,f2; //f1,f2都是函数指针。
2. #define——定义宏
无参宏定义:
#define 标识符 字符串 //标识符是宏名,字符串可以使常量、变量、表达式。
宏替换:源程序在编译之前,由预处理程序对我们写的源代码进行处理,会把源代码中所有出现宏名的地方一律使用宏的字符串去替换。
注意:
预处理指令经常写在函数之前
宏不是一个语句,是一个预处理指令,所以不需要加分号
宏有作用域,使用#undef可以取消宏定义
字符串中出现的宏不会被替换
宏可以嵌套定义:
#define R 4
#define PI 3.14
#define PI*R*R
可以使用宏起别名:#define INT1 int INT1 a=10;
有参宏定义:
#define SUM(a) a+a
有参宏实使用注意:
宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
在带参宏定义中,形参不分配内存单元,不需要写类型,不同于函数
有参宏的参数最好用括号括起来
宏定义可以定义多个语句
eg:#define M3(m,n) m=a+2;n=a*2;
3. typedef和#define的区别
#define是一个预处理指令,只是进行就简单的宏替换。
typedef是在编译时完成的,不是简单的替换,而是对类型说明符的重新命名。
#define INT1 int*
typedef int* INT2;
INT1 a1,b1; //a1是一个指针变量,但b1是一个普通变量
INT2 a2,b2; //a2,b2都是一个指针变量