struct是一个关键字,用来定义结构体的,定义结构体的时候,struct关键字不可以省略。
使用struct关键字来定义一个学生的结构体,其中包括姓名,年龄,考试分数。
//定义一个学生的结构体,包含姓名,年龄,分数 struct student { string name; int age; int score; }s3;创建结构体的三种方式
创建结构体的时候,关键字struct可以省略不写
1.student s1; s1.name="张三"; s1.age=18; s1.score=100;
2.student s2 = {"李四",17,100};
3.s3={{"王五",27,100};
因为我们在定义结构体的时候写过了s3
所以不写student,直接s3就可以了
结构体变量是通过"."来访问结构体成员的。
结构体数组- 定义结构体
- 创建结构体
- 给结构体赋值
- 遍历结构体
#include结构体指针using namespace std; #include //1、定义结构体 struct student { string name; int age; int score; }; int main() { //2.创建结构体 student stuArr[3]{ {"张三",18,98}, {"李三",8,48}, {"王三",18,98}, }; //3.修改结构体数组中的值 stuArr[2].name = "赵六"; stuArr[2].age = 23; stuArr[2].score = 12; //4.循环遍历结构体数组 for (int i = 0; i < 3; i++) { cout << "姓名: " << stuArr[i].name << " 年龄:" << stuArr[i].age << " 分数:" << stuArr[i].score << endl; }; system("pause"); return 0; }
作用:通过指针访问结构体中的成员
注意: 指针的数据类型需要和指向对象的数据类型一样,否则
所以当我们使用指针指向结构体的时候,使用的定义的结构体名而不是int。
指针访问结构体的语法:指针名 -> 结构体中的属性名
运行效果:
#includeusing namespace std; #include //1、定义结构体 struct student { string name; int age; int score; }; int main() { //2.创建结构体 student s ={ "张三",18,98 }; //3.通过指针指向结构体 student * p = &s; //4.通过指针访问结构体变量中的数据(指针名 -> 属性名) cout << " 姓名: " << p->name << endl; system("pause"); return 0; }
总结:结构体指针可以通过"->"来访问结构体成员
结构体嵌套结构体作用:结构体中的成员可以是另一个结构体
注意:结构体a中嵌套的结构体b,应在定义结构体a之前定义好结构体b,不然会
所以我们应该在定义结构体teacher之前先定义student结构体
创建结构体
打印结构体
结构体中嵌套结构体的代码
#include结构体做函数参数using namespace std; #include //定义学生的结构体 struct student { string name;//学生姓名 int age;//学生年龄 int score;//学生成绩 }; //定义老师的结构体,包含教师id,教师姓名,教师年龄以及辅导的学生 struct teacher { int id;//教师id string name;//教师姓名 int age;//教师年龄 struct student s1; }; int main() { //创建结构体 teacher t; t.id = 0001; t.name = "老王"; t.age = 35; t.s1.name = "小盖"; t.s1.age = 18; t.s1.score = 66; //打印结构体 cout << "老师编号:" << t.id << " 老师的姓名:" << t.name << " 老师的年龄: " << t.age << endl; cout << t.name <<"辅导的学生---"<<"学生姓名: " << t.s1.name << " 学生成绩:" << t.s1.score << " 学生的年龄: " << t.s1.age << endl; system("pause"); return 0; }
- 值传递
- 地址传递
值传递:只改变形参不改变实参
#include#include using namespace std; //1.定义结构体 struct student { string name;//姓名 int age;//年龄 int score;//分数 }; //定义值传递的函数 void a(student s1) { s1.age = 5; cout<<"值传递函数中打印 " << " 姓名: " << s1.name << " 年龄: " << s1.age << endl; } int main() { //2.创建结构体 student s1 = { "张三",18,88 }; a(s1); cout << "main函数中打印 " << " 姓名: "<
地址传递
地址传递:即改变形参也改变实参
#include#include using namespace std; //1.定义结构体 struct student { string name;//姓名 int age;//年龄 int score;//分数 }; //定义地址传递的函数 void a(struct student * p) { p->age = 5; cout<<"值传递函数中打印 " << " 姓名: " << p->name << " 年龄: " << p->age << endl; } int main() { //2.创建结构体 student s1 = { "张三",18,88 }; a(&s1); cout << "main函数中打印 " << " 姓名: " << s1.name << " 年龄: " << s1.age << endl; system("pause"); return 0; } 总结:当结构体作为函数参数的时候,如果是值传递的话不改变实参,如果是地址传递的话会改变实参。
结构体中const使用场景作用:加const防止误 *** 作
#include#include using namespace std; //1.定义结构体 struct student { string name;//姓名 int age;//年龄 int score;//分数 }; //定义地址传递的函数----在函数的形参前加上const后 void a(const student * p) { p->age = 5;//就不会允许修改结构体的属性值了 cout<<"值传递函数中打印 " << " 姓名: " << p->name << " 年龄: " << p->age << endl; } int main() { //2.创建结构体 student s1 = { "张三",18,88 }; a(&s1); cout << "main函数中打印 " << " 姓名: " << s1.name << " 年龄: " << s1.age << endl; system("pause"); return 0; } 总结:加上const以后,就不允许修改结构体里的属性值了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)