typedef 用来声明新的数据类型,利用编译器来实现类型安全检查
基本结构为
typedef 原类型 新类型
typedef int uint32
typedef struct student stu //student 是已经声明好的类型。
//stu 是通过typedef 新声明的类型
在c 中,不加typedef时,声明结构体类型主要有3种
struct Student
{
int data;
};
//常规型,使用时直接
struct Student Stu1;
struct Student
{
int data;
}Stu1,Stu2;
//附加型,这种形式在声明的同时附加定义了两个全局结构体变量,可以直接使用变量如
Stu1.data=1;
Stu2.data=2;
//如果要定义新的数据类型,需要
struct Student Stu3;
struct
{
int data;
}Stu1;
//一次性型,比较少见,只能使用声明好的全局变量,也不能定义新变量
Stu1.data=1;
c中,加了typedef 时
- 对于常规型
typedef struct Stu* pStu; //因为下面并没有成功声明新类型,所以需要加struct
typedef struct Student //这里的typedef 形同虚设,结尾没有变量名相当于没有新别名
{
int data;
};
//使用时直接
struct Student Stu1; //结构体变量
pStu pstu1 = NULL; //结构体指针变量
- 对于附加型
typedef Stu1* pStu; //这里struct 可加可不加
typedef struct Student
{
int data;
}Stu1,Stu2;//这里的名字相当于结构体类型别名了
//也就是”struct...}“这部分构成一个已定义的结构体类型,
//相当于typedef s...} Stu1
// typedef Stu1 Stu2
//使用时直接
Stu1 student1; //结构体变量
Stu2 student2;
pStu pstu1 = NULL; //结构体指针变量
- 对于一次性型,typedef 引起的性质改变挺大
typedef Stu1* pStu; //这里加了struct时 定义指针类型变量平台会报错
typedef struct
{
int data;
}Stu1;
//对于这种写法,Stu1为新类型名,但是无法声明新的类型名,使用时可以
Stu1 stu;//变量
pStu p1;//指针变量
在c++中,限制不那么大
//在c++里很简单,直接
struct Student
{
int a;
};
//于是就定义了结构体类型Student,声明变量时直接
Student stu2;
至于其他的,和c差不多
总结,无 typedef时,在末尾定义的是全局变量,可以直接使用它
有typedef 时,在末尾定义的是结构类型,相当一个新的名字