Samxander's home

You shall see the difference now that we are back again!

0%

数据类型:结构体

结构体

在实际问题中,仅仅使用整型(int long long),浮点型(float double),字符型(char)以及数组、字符串这些数据类型经常不够。有时候我们需要其中的几种一起来修饰某个变量,例如一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整型)等等。这些数据类型都不同,但是它们又要表示一个整体,要存在联系,那么我们就需要一个新的数据类型。

结构体就能将不同类型的数据存放在一起,作为个整体进行处理。

结构体的声明:

1
2
3
4
5
6
7
8
9
10
11
struct tag//申明一个结构体
{
member1;
member2;
}variable-list;
//▶ struct是结构体关键字
//▶ tag是结构体的标签名,是自定义的
//▶ struct tag就是结构体类型
//▶ {}里面放的是成员列表
//▶ variable-list是变量
//▶ member1 , member2 是结构体成员

结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型

而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型

结构体的基础结构
1.先定义结构体类型,再定义结构体变量。

1
2
3
4
5
6
7
8
9
10
struct Student
{
int num;
char name[20];//结构体成员
char sex;
int age;
float score;
char addr[30];
};
struct Student stu1,stu2;//结构体变量

2.直接定义结构体变量(匿名结构体)。
1
2
3
4
5
6
7
struct
{
char name[20];
char sex;
int num;
float score[3];
}person1,person2;

注意:使用匿名结构体,只能使用一次。无法多次使用一个结构体模块!

Typedef的引入:
以此为例:

1
2
3
4
5
6
struct Student
{
int id;
int age;
float score;
}

在其他地方定义变量时,需要用到数据类型+变量名,如int a; float b; char c;

而若要定义结构体变量stu时,利用数据类型+变量名,我们可以自然而然地写出Student stu;。但这样写,编译器可能会报错,提示我们需要在前面加上struct,于是我们应写为:struct Student stu;

为方便起见,我们添加一行代码:typedef struct Student Student。或者,可以将上述代码改为:

1
2
3
4
5
6
typedef struct//使用链表等数据类型时,struct后面要加Student.
{
int id;
int age;
float score;
}Student;

这样我们就可以直接用Student stu来定义结构体变量。

结构体的嵌套
例如,在学生的信息中,需要添加学生的生日信息,则可以使用结构体嵌套。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef struct birthday//可加可不加
{
int year;
int month;
int day;
}Birthday;

typedef struct Student
{
int id;
char *name;
int age;
float score;
Birthday birthday;//嵌套使用
}Student;

这样,学生信息里面就包含了学生的生日信息。

结构体变量的赋值
录入一个学生的信息,可以通过以下代码实现。

1
Student stu1={1001,"张三",18,100,{2006,1,24}};

访问结构体成员变量
使用点(.)操作符号

e.g.访问学号:stu1.id.
访问生日信息中的月份:stu1.birthday.month.

结构体作为函数的参数
例如,要写一个函数,来打印学生信息,写法是:

1
2
3
4
5
6
7
8
9
void printStudentInfo(Student stu)
{
cout<<"学号:"<<stu.id<<" ";
cout<<"姓名:"<<stu.name<<" ";
cout<<"年龄:"<<stu.age<<" ";
cout<<"生日:"<<stu.birthday.year<<"-";
cout<<stu.birthday.month<<"-";
cout<<stu.birthday.day<<endl;
}

Insist on writing original high-quality articles. Your support is my biggest motivation.