上次学习了指针的应用中关于指针在数组和函数中的应用。昨天学习了结构体相关知识,今天复盘一下。
引言:在最初的学习中我们已经知道数据类型可以分为很多种,常见的有int型,char型等。那在实际的项目中我们可能会出现需要自己创建数据类型的时候。或者我们想同时使用好几种数据类型,这时候就用到了结构体,结构体最大的作用就是对多种数据类型进行封装。
结构体的声明:比如我们想录入一整个学生信息表,那一条学生信息中包含学生的姓名,年纪,性别,成绩等各个特征之间是不同的数据类型,我们可以使用结构体进行封装,使操作更加便捷。
结构体声明如下
struct student{ //struct是必须要写的,student是你需要定义的结构体类型的名字,自己起就行
string name; //大括号中写下自己需要封装的几种变量类型及名称,以分号区分开。注意名字是字符串类型
int age;
int score;
};
结构体的引用:有了以上结构体声明,那我们怎么引用这个结构体呢?之前的学习中我们知道定义一个int型变量的可以写作int a=20;仿照这个形式,我们可以写student S1={"张三”,24,87},具体看如下代码
#include<iostream>
#include<string>
using namespace std;//因为使用了string所以要加这个头文件
struct student{
string name;
int age;
int score;
}; //在主函数外面写结构体声明
int main() {
student S1 = { "二狗",15,6 };//定义一个叫S1的类型为student的结构体
cout << "姓名为:" << S1.name << " 年龄为:" << S1.age << " 分数为:" << S1.score << endl;
}
运行代码后结果如下:
结构体与数组:上面我们可以看到已经成功地声明了一个名字为S1类型为student的结构体变量,也输出了一个学生的基本信息,假如有一百个学生我每次都命名从S1-S100未免也太麻烦了些。所以采用下面的方式,前面的声明部分不用改变,就在后面定义部分改变就可以了。代码如下
#include<iostream>
#include<string>
using namespace std;
struct student{
string name;
int age;
int score;
};//前面声明部分不用改变
int main() {
struct student arr[3]{
{ "张三",18,100 },
{ "张四", 28, 100 },
{ "张五", 18, 190 }
};
for (int i = 0; i < 3; i++) {//使用for循环输出数组中的学生信息
cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;
}
system("pause");
}
输出结果如下:
嵌套结构体:在实际使用过程中还会出现一种情况就是需要两个结构体嵌套使用,比如一个老师的基本信息中需要包含所教学生的信息。具体代码如下:
#include<iostream>
#include<string>
using namespace std;
struct student {
string name;
int age;
int score;
};//按照原来的方式声明结构体,分别把需要用到的老师和学生的结构体都声明
struct teacher {
string name;
int age;
struct student s1;//定义一个类型为student的名叫S1的
};//因为老师的结构体声明中引用的学生的,使用学生的声明要在老师的前面
int main() {
teacher t;//定义一个名字叫t的类型为teacher的结构体变量
t.name = "张一";
t.age = 67;
t.s1.name = "二狗";
t.s1.age = 15;
t.s1.score = 6;
cout << "一个" << t.age << "岁" << "叫" << t.name << "的老头" << "教了一个叫" << t.s1.name << "的" << t.s1.age << "岁小孩,考试就考了" << t.s1.score <<"分" << endl;
}
运行结果如下: