目录
传值只是传对象的值,不传地址,所以实参改变不会影响原形参的值!
传引用是把对象所在的地址传过去(即传了整个对象),所以实参和形参指向同一地址,任何一方改变地址中的值,另一方的值也会改变!
一、含义和理解:
-
传值是实参的值传递给形参;
-
传地址是传的实参指向的首地址;
-
传引用是传实参指向的对象.
注意:传地址和传引用有稍许差别,就是传的首地址不一定就是一个对象,有可能对象占的地址空间大,则这样就只能是指向一个首地址,并不能知道对象的长度(如指向的对象是一个数组对象,传地址就是指向了这个数组对象的首地址);而传引用可以表示指向这个完整的对象。
(触类旁通:指针和引用,应该和传地址和传引用一样,是有区别的。)
通俗易懂地理解传值和传引用:
传值:类似于我把自己的文件复制一份传给你,你拿到的是复印件,这时候你对你手里的复印件进行编写或者修改等操作,都不会影响我手中原文件,这就是传值的含义,只是把对象的值复制一份给你,你对你手里的对象怎么操作无关于我的原对象。
传引用:相当于我把我手中的文件与你共享了一份,你和我都可以打开和编辑这同一份文件,这时候你如果对这个文件进行修改,那我看见的这份文件也是修改之后的!
二、实例:
1.传引用:
代码:
#include "pch.h"
#include <iostream>
using namespace std;
void swap(int&, int&);//传引用
int main()
{
int a = 5, b = 10;
cout << "a=" << a << ",b=" << b << endl;//输出当前a,b的值
swap(a, b); //调用swap函数
cout << "after swap:a=" << a << ",b=" << b << endl;//输出调用swap之后的a,b值
//return 0; //return语句用来结束循环,或返回一个函数的值。return 0 表示成功完成本函数。
}
void swap(int&x, int&y)//传引用:将参数a=5,b=10的引用传给x=5,y=10
{
int temp;
temp = x;//将x=5传引用给temp,则temp=5
x = y; //将y=10传引用给x,则x=10;
y = temp; //将temp=5传引用给y,则y=5.
}
输出结果为:
内存存储说明:
2.传值:
代码:
#include "pch.h"
#include <iostream>
using namespace std;
void swap(int, int);//传值
int main()
{
int a = 5, b = 10;
cout << "a=" << a << ",b=" << b << endl;//输出当前a,b的值
swap(a, b); //调用swap函数
cout << "after swap:a=" << a << ",b=" << b << endl;//输出调用swap之后的a,b值
//return 0; //return语句用来结束循环,或返回一个函数的值。return 0 表示成功完成本函数。
}
void swap(int x, int y)//传值:将参数a=5,b=10的值传给x=5,y=10
{
int temp;
temp = x;//将x=5的值传给temp,则temp=5
x = y; //将y=10的值传给x,则x=10;
y = temp; //将temp=5的值传给y,则y=5.
}
运行结果:
内存说明: