1、typedef关键字
C 语言提供了typedef关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语BYTE:
typedef unsigned char BYTE;
在这个类型定义之后,标识符 BYTE 可作为类型unsigned char的缩写,例如:
BYTE b1, b2;
typedef相当于给unsigned char起了一个别名。
typedef vs #define
#define是 C 指令,用于为各种数据类型定义别名,与typedef类似,但是它们有以下几点不同:
typedef仅限于为类型定义符号名称,#define不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef是由编译器执行解释的,#define语句是由预编译器进行处理的。
2、typedef struct
typedef struct的使用方法有很多种,这里只介绍最标准的一种使用方法:
声明:
typedef struct Student{int a;}Stu;
使用:
Stu xiaoming;
区别:
若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n; 区别就在于使用时,是否可以省去struct这个关键字。
但是在C++中又会造成区别:
在c++中如果用typedef的话:
struct Student{int a;}stu1;//stu1是一个变量typedef struct Student2{int a;}stu2;//stu2是一个结构体类型
stu1是一个变量,使用时可以直接访问stu1.astu2是一个结构体类型,使用时则必须先 stu2 s2
3、结构体指针
定义:
typedef struct Student{int a;}Stu,*pStu;
使用:
pStu exam1;Stu exam2;exam1 = exam2;exam2.a = 1;printf("%d",exam1->a);//输出为1
或者:
Stu exam[4];pStu p;p = exam;p +=2;//等价于p = exam[1]
等价于:
typedef struct Student{int a;}Stu;
Stu *exam1;Stu exam2;exam1 = exam2;exam2.a = 1;printf("%d",exam1->a);//输出为1