C++结构体
1.1 结构体的定义和使用
结构体的定义:
语法:struct 结构体名 {结构体成员列表}
例:
#include <iostream>
#include <string>
using namespace std;
struct Student
{
string name;
int age;
int sorce;
};
在上面的实例中我们创建了一个叫Student的结构体他的成员包含了name,age和sorce
我们可以把它想象成一个学生,他包含了名字,年龄和成绩
通过结构体创建变量
使用结构体创建变量就和我们创建普通变量语法基本一样:
- 数据类型 变量名[={变量值a,变量值b,...}]
就拿上面的那个举例
代码:
Student zhangsan = { "张三",18,90 };
这个变量该怎么输出呢?我们只需要通过 变量名.成员名 直接输出即可:
cout << "学生:" << zhangsan.name << "年龄:" << zhangsan.age << "总成绩:" << zhangsan.sorce << endl;
1.2 结构体数组
作用:将自定义的结构体放入到数组中方便维护
语法:struct结构体名 数组名[元素个数] = {{},{},...{}}
示例:
#include <iostream>
#include <string>
using namespace std;
struct Student
{
//成员列表
string name;
int arg;
int sorce;
};
int main()
{
//结构体数组
Student a[] = { {"a",0,0},{"b",2,3}};
}
给结构体数组中的元素赋值
语法:数组名[元素位置].成员名 = 值
例:
a[0].name = "李四";
a[0].age = 20;
a[0].sorce = 200;
遍历结构体数组
例:
Student a[] = { {"a",0,0},{"b",2,3},{"c",0,250}};
a[0].name = "李四";
a[0].age = 20;
a[0].sorce = 200;
for (int i = 0; i < 3; i++)
{
cout << "姓名:" << a[i].name << "\t年龄:" << a[i].age << "\t成绩:" << a[i].sorce << endl;
}
程序输出:
姓名:李四 年龄:20 成绩:200
姓名:b 年龄:2 成绩:3
姓名:c 年龄:0 成绩:250
1.3 结构体指针
语法:数据类型 * 指针名 = &结构体变量名;
例:
struct Student
{
string name;
int age;
int sorce;
};
int main()
{
Student zhangsan = { "张三",18,90 };
Student * p = &zhangsan;
//创建指针
}
通过指针访问结构体变量中的数据
我们通过指针访问结构体中的变量可以通过 -> 符号,该符号由一个减号“-”和大于号“>”组成
例:
cout << p->name << endl;
//输出成员值
1.4 结构体嵌套结构体
作用:结构体中的成员可以是另一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体
例子:
#include <iostream>
using namespace std;
struct Student
{
string name;
int age;
int sorce;
};
struct teacher
{
int id;
string name;
int age;
Student a;
};
int main()
{
teacher wang = { 10055,"王五",44,{"李四",20,100} };
cout << "teacher name:\t" << wang.name << endl;
cout << "teacher id:\t" << wang.id << endl;
cout << "student name:\t" << wang.a.name << endl;
//通过.访问成员的的成员
cout << "student age:\t" << wang.a.age << endl;
cout << "student sorce:\t" << wang.a.sorce << endl;
}
1.5 结构体做函数的参数
作用:将结构体作为参数向函数中传递传递方式有两种:
例:
#include <iostream>
using namespace std;
//创建结构体Student
struct Student
{
string name;
int age;
int sorce;
};
//创建结构体变量b
Student b = { "法外狂徒张三",99,200 };
//使用值传递的函数
void output_stu_info(Student a)
{
cout << "name:\t" << a.name << endl;
cout << "age:\t" << a.age << endl;
cout << "sorce:\t" << a.sorce << endl;
//使用值传递不可修改实参
}
//使用地址传递的函数
void output_stu_info2(Student * a)
{
cout << "name:\t" << a->name << endl;
cout << "age:\t" << a->age << endl;
cout << "sorce:\t" << a->sorce << endl;
//使用地址传递可以修改实参
a->age = 100;
a->name = "守法好公民李四";
cout << "name:\t" << a->name << endl;
cout << "age:\t" << a->age << endl;
cout << "-----------------" << endl;
cout << "name:\t" << b.name << endl;
cout << "age:\t" << b.age << endl;
}
int main()
{
//创建指针p
Student* p = &b;
//参数传值
output_stu_info(b);
//参数传址
output_stu_info2(p);
}
程序输出:
name: 法外狂徒张三
age: 99
sorce: 200
-----------------
name: 法外狂徒张三
age: 99
sorce: 200
name: 守法好公民李四
age: 100
-----------------
name: 守法好公民李四
age: 100
1.6 结构体中const的使用场景