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

来源:互联网 发布:淘宝店铺美工 编辑:程序博客网 时间:2024/06/07 12:13

------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都是一个指针变量

   

0 0