结构体的定义 (c语言 c++)
本文主要针对结构体的定义方式做了区分,结构体的其他功能,本文并没有体现
1 先定义结构体类型,再定义结构体变量
结构体的定义与结构体变量的定义分开进行
struct Student //结构体类型的定义
{
string name;
string class;
double score;
};
struct Student Stu; //结构体变量的定义
//只能用 struct Student Stu; 来定义变量,Stu是一个结构体变量
//Stu类似于 int a=10 中a的地位,是变量
2 定义结构体类型的同时定义结构体变量
Stu1 是结构体变量,与1中的Stu是一样的
还可以继续定义struct Student Stu2;
Stu2也是结构体变量,与Stu1同地位
Stu1与Stu2都是结构体变量,类似于 int a 中 a 的地位
struct Student
{
string name;
string class;
double score;
}Stu1;
struct Student Stu2;
//Stu1 是结构体变量,与1中的Stu是一样的
//还可以继续定义struct Student Stu2;Stu2也是结构体变量,与Stu1同地位
//Stu1与Stu2都是结构体变量,类似于int a;中a的地位
3 不指定类型名而直接定义结构体变量
一般不使用这种方法,因为直接定义结构体变量stu1、stu2之后,就不能再继续定义该类型的变量。
相当于一次性玩偶,后续不能在继续定义结构体变量
struct
{
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
} stu1,stu2;
//这里的stu1和stu2都是结构体变量,相当于int a;中的a
//不建议这样使用,因为后续不能再继续定义结构体变量
4 加typedef后
重定义结构体,这里使用了typedef关键字,此关键字的作用就是声明数据类型的别名,所以类型为struct Student,别名为Stu。
这种方式在声明结构体变量时有两种方式
方式一:struct Student stu;
方式二:Stu stu1;//以结构体别名声明一个结构变量,此处可以省略关键字struct
这两种定义方式完全等价,只不过一个用的本名,一个用的别名
typedef struct stdudent
{
char name[20];
int age;
}Stu;
Stu stu3;
//Stu是一个数据类型,类似于 int,char,可以用来定义变量
//如Stu s1;s1在这里是结构体变量=>等价于struct stdudent s1
//Stu是struct stdudent的别名,两者等价