提示:typedef struct在C与C++中使用有所不同,若仅需某一种使用方法可针对性挑选学习。多学无害!!!!!!
前言
本文介绍typedef struct在C与C++中使用情况。嫌啰嗦的可直接跳到总结。
一、C中使用typedef定义结构体
1、C结构体未使用typedef的定义情况
情况1:先定义结构体类型,再定义结构体类型变量。可以定义更多的该结构体类型变量。
情况2:定义结构体类型同时定义结构体类型变量。可以定义更多的该结构体类型变量。
情况3:直接定义结构体类型变量。该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量。
//情况1
struct Student
{
char name[20];
};
struct Student stu1, stu2;
struct Student stu3, stu4;
//情况2
struct Student
{
char name[20];
}stu1, stu2;
struct Student stu3, stu4;
//情况3
struct
{
char name[20];
}stu1, stu2;
2、C结构体使用typedef的定义情况
情况4:使用typedef定义结构体后,定义变量时可以Stu stu1(更加简洁),也可以使用struct Student stu1。Stu实际上就是struct Student的别名(Stu == struct Student)。
//情况4
typedef struct Student
{
char name[20];
}Stu;
Stu stu1, stu2;
struct Student stu3, stu4;
//情况5
typedef struct
{
char name[20];
}Stu;
Stu stu1, stu2;
二、C++中使用typedef定义结构体
要知道在C中使用typedef定义结构体主要是为了更加简洁的定义结构体变量(使用别名代替重复写struct关键字)。然而该问题在C++中并不存在,因此在C++结构体中不必要使用typedef。但若在C++使用typedef的时候也会造成区别。
情况1:stu是一个变量,它可以直接访问stu.name。
情况2:Stu是一个结构体类型(Stu == struct Student)。需要先定义变量Stu stu1;才可以访问stu1.name
//情况1
struct Student
{
string name;
}stu;
struct Student stu1;
Student stu2;
//情况2
typedef struct Student
{
string name;
}Stu;
Stu stu1;
struct Student stu2;
Student stu3;
总结
typedef struct tagMyStruct
{
int a;
}MyStruct;
在C中,这个声明后申请结构变量的方法有两种:
1、struct tagMyStruct 变量名
2、MyStruct 变量名(使用typedef)
在c++中可以有
1、struct tagMyStruct 变量名
2、MyStruct 变量名(使用typedef)
3、tagMyStruct 变量名