C/C++ typedef struct笔记【清晰明了的C与C++结构体】

提示: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)

情况5:使用typedef定义结构体时没有写结构体名Student,定义变量时只能使用Stu stu1。

//情况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 变量名

猜你喜欢

转载自blog.csdn.net/Gary_ghw/article/details/128230430