#include<iostream>
#include<string>
using namespace std;
struct Student//结构体定义
{
string name;
int age;
int grade;
};
struct Teacher {
string name;
int age;
Student student;
};
//结构体做函数参数
//1. 值传递 形参的改变不会修改实参
void val(struct Teacher A) {
cout << A.age << endl;
}
//2.地址传递 因为传递的是地址所以 形参的改变会修改实参
void adr(struct Teacher* A) {//为啥常用地址传递呢?因为每一次值传递都要复制一份空间,占内存;但是因为使用地址传递,会修改形参,所以就要用到const了,客官您往下看
cout << A->name << endl;
}
//使用coust
void adr1(const struct Teacher* A) {
A->age = "王大牛";//有coust 不可修改
cout << A->name << endl;
}
int main() {
//创建结构体变量
struct Student s1;//此处struct可省略
s1.age = 10;
s1.name = "小美";
s1.grade = 98;
cout << "姓名 " << s1.name << "年龄 " << s1.age << "成绩" << s1.grade<<endl;
struct Student stdarray[2];//结构体数组
stdarray[0].age = 02;
stdarray[0].name = "小花";
stdarray[0].grade = 99;
cout << "姓名 " << stdarray[0].name << " 年龄 " << stdarray[0].age << " 成绩 " << stdarray[0].grade<<endl;
struct Student* s2=&s1;//结构体指针
cout << "姓名 " << s2->name << " 年龄 " << s2->age << " 成绩 " << s2->grade;
struct Teacher t;//结构体嵌套结构体
t.age = 28;
t.name = "赵铁柱";
t.student.name = "赵大山";
cout << "姓名 " << t.name << " 年龄 " << t.age << " 学生 " << t.student.name << endl;
val(t);
adr(&t);
}
注意两点
1.结构体做函数参数 时常用地址传递,因为传递的是地址所以 形参的改变会修改实参
1.1 值传递 形参的改变不会修改实参
void val(struct Teacher A) {
cout << A.age << endl;
}
1.2地址传递 因为传递的是地址所以 形参的改变会修改实参
void adr(struct Teacher* A) {但是因为使用地址传递,会修改形参,所以就要用到const了,客官您往下看
2.注意const的使用
因为传递的是地址所以 形参的改变会修改实参,所以就要用到const了,使用coust后就不能修改了
void adr1(const struct Teacher* A) {
A->age = "王大牛";//有coust 不可修改
cout << A->name << endl;
}