1. 程式人生 > >C語言/C++實現兩數交換函式

C語言/C++實現兩數交換函式

 首先我們可以先引入一箇中間變數temp進行數值交換。

在C語言中:

 下面的這個函式能不能達到函式交換的目的?

void Swap(int x, int y)
{
	int temp = 0;
	temp = x;
	x = y;
	y = temp;
}

int main()
{
	int x = 1;
	int y = 2;
	Swap(x, y);
	printf("x = %d , y = %d\n", x, y);
	system("pause");
	return 0;
}

執行一下:

我們發現這個函式是不能完成交換的功能的,這是因為在Swap(int x,int y)被呼叫時,實參進行副本初始化,函式並沒有訪問呼叫傳遞的實參本身,因而也不會修改實參的值。

也就是說函式被呼叫時傳入的是x,y的值,而不是它們的地址。只有傳入地址才能在函式呼叫時通過地址真正改變兩個數的值。否則就只是改變了函式棧幀裡建立的形參,這樣當函式完成呼叫時,棧幀裡面建立的形參就會隨之消失,無法完成交換。

所以在C語言中我們通常通過傳址來進行兩個數的交換,這時候就會利用到指標。

void Swap(int *x, int *y)
{
	int temp = 0;
	temp = *x;
	*x = *y;
	*y = temp;
}
int main()
{
	int x = 1;
	int y = 2;
	Swap(&x, &y);
	printf("x = %d , y = %d\n", x, y);
	system("pause");
	return 0;
}

執行一下:

此時就完成了兩個數的交換。

在C++中:

 C++中我們可以使用引用形參達到目的:

void Swap(int& x, int& y)
{
	int temp = 0;
	temp = x;
	x = y;
	y = temp;
}
int main()
{
	int a = 1;
	int b = 2;
	Swap(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	system("pause");
	return 0;
}

 執行一下:

此時也完成了兩個數的交換。

此外,還有一些其它的交換方法供參考:

x = x^y;
y = x^y;
x = x^y;
x = x*y;
y = x/y;
x = x/y;