以下测试使用Codeblocks编译器,Mingw编译环境。
在C编译环境下:
1、
typedef struct Student//Student 可省
{
int a;
}Stu;//这里相当于给struct Student,typedef一个别名Stu
Student a;//错误
struct Student a//正确
Stu a;//正确,Stu相当于struct Student的别名
typedef struct Student
{
int a;
struct Student *S;//如果是结构体内这样用,需要在上面写,后面Stu不管用。
}Stu;
2、
struct Student//这里struct Student 相当于一个数据类型
{
int a;
}Stu;//这里写Stu是一个变量,也就相当于后面如此定义struct Student Stu;
typedef struct Student A;
struct Student a;//正确
A b;//正确
在C++编译环境下(C++继承C后有区别):
1、
typedef struct Student
{
int a;
}Stu;//这里Stu是Student的一个别名相当typedef Stu Student。
Student a;//正确
struct Student a;//正确
Stu a;//正确,Stu相当于struct Student的别名
2、
struct Student
{
int a;
}Stu;//这里写Stu依然是一个变量。
Student a;//正确
综上所述,C++中的用法简单,typedef struct A{...}B; A,B都可以当成数据类型用;struct A{...}B;A为数据类型名,B为变量名。