结构体做函数参数(5)
作用:将结构体作为参数向函数中传递
传递方式有三种:
1.值传递:形参的改变,不会影响实参的值。(C/C++)
2.地址传递:。(C/C++)
3.引用:真正的以地址的方式传递参数,传递以后,行参和实参都是同一个对象,只是它们名字不同而已,对行参的修改将影响实参的值。(C++)
**********************************形参、实参概念******************************
实参:实实在在的数据,数值!
形参:占位符(变量名=占位符),它没有数据!
**********************************************************************************
值传递:
1 //1.值传递方式 2 void stu_info_01(struct Student s) 3 { 4 s.age = 100;//修改形参 5 cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 6 }
1 int main(void) 2 { 3 //创建结构体变量 4 struct Student s; 5 6 //结构体变量的初始化 7 s.name = "张三"; 8 s.age = 22; 9 s.score = 150; 10 11 //调用打印学生信息函数 12 stu_info_01(s); 13 cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 14 15 //stu_info_02(&s); 16 //stu_info_03(s); 17 18 system("pause"); 19 return 0; 20 }
结论:形参改变,实参的值不会改变!
地址传递:
1 //2.地址传递 2 void stu_info_02(struct Student *p) 3 { 4 p->age = 200; 5 cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数" << p->score << endl; 6 } 7 8 int main(void) 9 { 10 //创建结构体变量 11 struct Student s; 12 13 //结构体变量的初始化 14 s.name = "张三"; 15 s.age = 22; 16 s.score = 150; 17 18 //调用打印学生信息函数 19 //stu_info_01(s); 20 //cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 21 22 stu_info_02(&s); 23 cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 24 25 //stu_info_03(s); 26 27 system("pause"); 28 return 0; 29 }
结论:形参改变,实参也改变!
引用:
1 //3.引用 2 void stu_info_03(struct Student &p) 3 { 4 cout << "姓名:" << p.name << " 年龄:" << p.age << " 分数" << p.score << endl; 5 } 6 7 int main(void) 8 { 9 //创建结构体变量 10 struct Student s; 11 12 //结构体变量的初始化 13 s.name = "张三"; 14 s.age = 22; 15 s.score = 150; 16 17 //调用打印学生信息函数 18 //stu_info_01(s); 19 //cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 20 21 //stu_info_02(&s); 22 //cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 23 24 stu_info_03(s); 25 cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数" << s.score << endl; 26 27 system("pause"); 28 return 0; 29 }
结论:形参改变,实参也改变!