结构体(struct)
通俗来讲,就是打包封装一些有共同特征的不同数据的变量封装在内部,通过一定方法访问修改内部变量。可以说,结构体是让一些很散的数据变得很整(即井然有序)。
结构体的定义和使用
语法:struct 结构体名 { 结构体成员列表 };
- struct 结构体名 变量名
- struct 结构体名 变量名 = { 成员1值 , 成员2值…}
- 定义结构体时创建变量
#include "iostream"
using namespace std;
//结构体变量创建方式3:定义结构体时顺便创建变量
struct student
{
//成员列表
char name[10];
int age;
int score;
}stu3
int main(){
//结构体变量创建方式1: struct 结构体名 变量名
struct student stu1;
stu1.name = "七喜";
stu1.age = 20;
stu1。score = 95;
cout<<"姓名:"<<stu1.name <<" 年龄:"<<stu1.age <<" 分数:"<<stu1.score <<endl;
//创建结构体变量方式2:
struct student sut2 = {"可乐",19,100};
cout<< "姓名:"<<stu2.name<<" 年龄:"<<stu2.age<<" 分数:"<<stu2.score<< endl;
//方式3
stu3.name = "雪碧";
stu3.age = 20;
stu3.score = 90;
cout<<"姓名:"<<stu3.name <<" 年龄:"<<stu3.age<<" 分数:"<<stu3.score<< endl;
system('pause');
return 0;
}
其中,system('pause')在C中就是从程序里调用“pause”命令,类似:“Press any key to exit”等待用户按下任意键继续的意思;在C++中,作用于防止窗口消失,即暂停黑窗口,注意不要在return语句之后加system(“pause”),那样执行不了!
结构体数组
作用:将自定义的结构体放入到数组中方便维护
语法: struct 结构体名 数组名[元素个数] = { { } , { } ,...., { } }
结构体指针
. 和->d 区别:
. 来访问结构体成员/属性
-> 来访问其指向的结构体成员/属性
结构体嵌套
#include "iostream"
using namespace std;
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//教师结构体定义
struct teacher
{
//成员列表
int id; //职工编号
string name; //教师姓名
int age; //教师年龄
struct student stu; //子结构体 学生
};
int main() {
struct teacher t1;
t1.id = 10000;
t1.name = "老王";
t1.age = 40;
t1.stu.name = "张三";
t1.stu.age = 18;
t1.stu.score = 100;
cout << " 教师 职工编号: " << t1.id <<
" 姓名: " << t1.name <<
" 年龄: " << t1.age << endl;
cout << " 辅导学员 姓名: " << t1.stu.name <<
" 年龄:" << t1.stu.age <<
" 考试分数: " << t1.stu.score << endl;
system("pause");
return 0;
}
结构体做函数参数
传递方式包括:值传递、地址传递
#include "iostream"
using namespace std;
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//值传递
void printStudent(student stu )
{
stu.age = 28;
cout << "子函数中 姓名:" << stu.name <<
" 年龄: " << stu.age <<
" 分数:" << stu.score << endl;
}
//地址传递
void printStudent2(student *stu)
{
stu->age = 28;
cout << "子函数中 姓名:" << stu->name <<
" 年龄: " << stu->age <<
" 分数:" << stu->score << endl;
}
int main() {
student stu = { "张三",18,100};
//值传递
printStudent(stu);
cout << "主函数中 姓名:" << stu.name <<
" 年龄: " << stu.age <<
" 分数:" << stu.score << endl;
cout << endl;
//地址传递
printStudent2(&stu);
cout << "主函数中 姓名:" << stu.name <<
" 年龄: " << stu.age <<
" 分数:" << stu.score << endl;
system("pause");
return 0;
}
注:如果不想修改主函数中的数据,用值传递,反之用地址传递。
可以用关键字const定义指针stu,修饰列表成员属性,保证修饰的属性的值(左定值,右定向)不被改变,防止函数体中的误操作。