1. 程式人生 > >傳值,傳引用

傳值,傳引用

值傳遞:函式操作的是形參,將實參拷貝給形參,拷貝完成後對形參修改不會影響實參,實參的值不會改變。

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

在這裡插入圖片描述 傳遞引用時可以看到實參沒有拷貝給形參,引用傳遞操作的地址是實參地址 ,對形參進行操作就是對實參進行操作。