传值,传引用

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

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;
}

传值,传引用
传递引用时可以看到实参没有拷贝给形参,引用传递操作的地址是实参地址 ,对形参进行操作就是对实参进行操作。