1 结构体的定义和使用
定义结构体
创建对象,有三种方式
创建对象方式三(但一般不这么写)
2 结构体数组
3 结构体指针
struct student {
string name;//姓名
int age;//年龄
int score;//分数
};
int main() {
//1、创建学生结构体变量
struct student s = { "张三",18 , 100 };
//2、通过指针指向结构体变量
student* p = &s;
//3、通过指针访问结构体变量中的数据
cout << p->age << endl;//指针访问
cout << s.age << endl;//直接访问
return 0;
}
4 结构体嵌套结构体
struct student {
string name;//姓名
int age;//年龄
int score;//分数
};
struct teacher {
int id;
string name;
int age;
struct student stu1;//老师辅导的学生
};
int main() {
//学生
struct student s = { "张三",18 , 100 };
//老师
teacher t = {100,"老王",50,s};
cout << t.id << " " << t.name << " " << t.age << "\n"
<< t.stu1.name << " " << t.stu1.age << " " << t.stu1.score << " " << endl;
return 0;
}
5 结构体做函数参数
值传递,传值进来的会复制一个新的副本,如果结构体数组很大,非常占内存;
地址传递,一个地址就占用8个字节。
值传递,不会修改实参;
地址传递,修改实参;
struct student {
string name;//姓名
int age;//年龄
int score;//分数
};
//值传递,打印学生信息
void print(student s) {
cout << " 值传递: "<<s.name << " " << s.age << " " << s.score << endl;
}
//地址传递,打印学生信息
void print2(student* s) {
cout << "地址传递: "<<s->name << " " << s->age << " " << s->score << endl;
}
int main() {
//学生
struct student s = { "张三",18 , 100 };
// 结构体做函数参数
//将学生传入到一个参数中,打印学生身上的所有信息
print(s);
print2(&s);
return 0;
}
//值传递,打印学生信息
void print(student s) {
s.age = 80;
cout << "子函数, 值传递: "<<s.name << " " << s.age << " " << s.score << endl;
}
//地址传递,打印学生信息
void print2(student* s) {
s->age = 90;
cout << "子函数,地址传递: "<<s->name << " " << s->age << " " << s->score << endl;
}
int main() {
//学生
struct student s = { "张三",18 , 100 };
// 结构体做函数参数
//将学生传入到一个参数中,打印学生身上的所有信息
print(s);
cout << "值传递, 不改变实参,主函数: " << s.name << " " << s.age << " " << s.score << endl<<endl;
print2(&s);
cout << "地址传递,改变实参,主函数: " << s.name << " " << s.age << " " << s.score << endl;
return 0;
}
6 结构体中const 使用
常量指针,不可以修改数值