您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——C语言——typedef和#define

2015-12-09 09:32 267 查看
------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都是一个指针变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: