传值和传地址

作用:利用指针作函数参数,可以修改实参的值
示例:

//值传递
void swap1(int a ,int b)
{
	int temp = a;
	a = b; 
	b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

int main() {

	int a = 10;
	int b = 20;
	swap1(a, b); // 值传递不会改变实参,输出10,20

	swap2(&a, &b); //地址传递会改变实参,输出20,10

	cout << "a = " << a << endl;

	cout << "b = " << b << endl;

	system("pause");

	return 0;
}

总结:如果不想修改实参,就用值传递,如果想修改实参,就用地址传递

结构体做函数参数

作用:将结构体作为参数向函数中传递

传递方式有两种:

  • 值传递
  • 地址传递

示例:

//学生结构体定义
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);//张三,28,100
	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;//张三,18,100

	cout << endl;

	//地址传递
	printStudent2(&stu);//张三,28,100
	cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;//张三,28,100

	system("pause");

	return 0;
}

总结:如果不想修改主函数中的数据,用值传递,反之用地址传递
值传递时形参改变但实参不变

posted @ 2021-03-02 08:14  fynnn  阅读(71)  评论(0编辑  收藏  举报