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;

猜你喜欢

转载自blog.csdn.net/ENSHADOWER/article/details/83036307
今日推荐