传值,传引用

值传递:函数操作的是形参,将实参拷贝给形参,拷贝完成后对形参修改不会影响实参,实参的值不会改变。

void swapValue(int x, int y)
{
	cout << "交换前:" << endl;
	cout << "x=" <<x<<";y="<<y<< endl;
	int temp;
	temp = x;
	x = y;
	y = temp;
	cout << "交换后:" << endl;
	cout << "x=" << x << ";y=" << y << endl;	
}
int main()
{
	int a = 10;
	int b = 15;
	swapValue(a, b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
}

在这里插入图片描述
可以看到调用swapValue函数只对形参x和y的值进行了互换,而并不影响实参a和b的值。

引用传递:引用是给对象起了另外一个名字,用声明符 &定义应用类型,引用必须初始化,也就是说一旦定义引用,就必须给他绑定个对象,他和对象共用一个地址,改变对象的值,引用也会改变。改变引用的值,对象也会改变。引用作为参数传递时不进行拷贝。
例:

int main()
{
	int a = 10;
	int & b = a;
	cout << "a=" << a<<endl;
	cout << "b=" << b << endl;
	cout << "a的地址=" << &a << endl;
	cout << "b的地址=" << &b << endl;
	cout << "改变a:" << endl;
	a++;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "a的地址=" << &a << endl;
	cout << "b的地址=" << &b << endl;
	cout << "改变引用b:" << endl;
	b++;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "a的地址=" << &a << endl;
	cout << "b的地址=" << &b << endl;
}

在这里插入图片描述
上面的例子可以看出对象值的改变引用也随之变化,引用的变化对象值也随之变化,但是他们的地址一直不变,而且是同一个地址。
例:

void swapRefer(int& x, int& y)
{
	cout << "交换前:" << endl;
	cout << "x=" << x << ";y=" << y << endl;
	cout<<"x="<<&x<< ";y=" <<&y << endl;
	int temp;
	temp = x;
	x = y;
	y = temp;
	cout << "交换后:" << endl;
	cout << "x=" << x << ";y=" << y << endl;
	cout << "x=" << &x << ";y=" << &y << endl;
}
int main()
{
	int a = 10;
	int& aRe = a;
	int b = 15;
	int& bRe = b;
	swapRefer(aRe,bRe);
	cout << "a=" << a << "     a地址="<<&a<<endl;
	cout << "b=" << b <<"     b地址=" <<&b<<endl;
}

在这里插入图片描述
传递引用时可以看到实参没有拷贝给形参,引用传递操作的地址是实参地址 ,对形参进行操作就是对实参进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值