typedef struct和struct的区别和用法,写作备忘.
C语言中:
在C中定义一个结构体类型要用typedef:
1 | typedef struct Student |
于是在声明变量时就可以:
1 | CalcServerClass *klass; |
如果没有typedef就必须使用“struct Student klass1;”来声明,CalcServerClass就成了struct Student的另一个名字。
同样,这里可以不加 Student:
1 | typedef struct |
这样改变之后,声明时不能再用“struct Student klass1;”,必须是“CalcServerClass klass1; ”。
C++中:
C++中想要实现上述同种效果,只需:
1 | struct Student |
定义了结构体类型Student,声明变量时直接 “*Student klass2;”
如果要在C++中使用typedef的话,与在C中有一些区别:
1 | struct Student |
使用时可以直接访问 stu1.a
而
1 | typedef struct Student2 |
stu2则必须先“*stu s2;”,然后才能“s2.a=10;*”
总结
typedef struct 和struct的实质:
1 | typedef struct tagMyStruct |
tagMystruct是标识符,MyStruct是变量类型(相当于 int、char等一样)。
这一语句实际上完成了两个操作:
定义一个新的结构类型
1
2
3
4struct tagMyStruct
{
int a;
};tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论typedef struct是否和tagMyStruct放在一起,这个结构都存在。
可以使用struct tagMyStruct Name1来定义变量,但 tagMyStruct Name1来定义变量是错误的,因为struct和tagMyStruct放在一起才能表示一个结构类型。
typedef为这个新的结构起了一个新的名字,叫Mystruct。
1
typedef struct tagMyStruct MyStruct;
因此,Mystruct在实际上相当于struct tagMyStruct,我们可以使用MyStruct varName定义变量。
C和C++在使用上的区别
1 | typedef struct tagMyStruct |
在C中,这个申明后申请结构变量的方法有两种:
(1)struct tagMyStruct 变量名
(2)MyStruct 变量名
在C++中,使用方法如下:
(1)struct tagMyStruct 变量名
(2)MyStruct 变量名
(3)tagMyStruct 变量名