通过函数交换两个数的四种方法

我们以C++语言作为演示,除了引用是C所不支持的,其他都可以。

方法一:使用指针+第三方变量

#include <iostream>
using namespace std;

void exchange(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

int main(void)
{
	int num1 = 2;
	int num2 = 3;
	exchange(&num1, &num2);
	cout<<"num1: "<<num1<<"\nnum2: "<<num2<<endl;
	return 0;
}

解释:将num1和num2的地址传递给exchange()函数,然后让该函数直接对num1和num2中的内容做交换。如图:

方法二:使用指针+按位移或

#include <iostream>
using namespace std;

void exchange(int *a, int *b)
{
	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *a ^ *b;
}

int main(void)
{
	int num1 = 2;
	int num2 = 3;
	exchange(&num1, &num2);
	cout<<"num1: "<<num1<<"\nnum2: "<<num2<<endl;
	return 0;
}

按位移或:相同为0,不同为1。

真值表如图:

a b 结果
0 0 0
0 1 1
1 0 1
1 1 0

方法三:使用引用(C++特有,C语言不可用)+第三方变量

#include <iostream>
using namespace std;

void exchange(int &num1, int &num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;
}

int main(void)
{
	int num1 = 2;
	int num2 = 3;
	exchange(num1, num2);
	cout<<"num1: "<<num1<<"\nnum2: "<<num2<<endl;
}

第三方变量的作用的方法一中的是一样的,下面来解释下C++中的引用。

C++中的引用的基本原理还是指针变量。使用&num1相当于为num1变量取一个别名。在函数exchange()中,使用num1就相当于用了它的别名,直接对其地址操作。所以在函数中改变了num1的值,它本身的值也是会变的。

方法四:使用引用+按位异或

#include <iostream>
using namespace std;

void exchange(int &num1, int &num2)
{
	num1 = num1 ^ num2;
	num2 = num1 ^ num2;
	num1 = num1 ^ num2;
}

int main(void)
{
	int num1 = 2;
	int num2 = 3;
	exchange(num1, num2);
	cout<<"num1: "<<num1<<"\nnum2: "<<num2<<endl;
}

引用和按位异或在前面都讲过了。这里不再重复。以上就是使用函数交换两个数的四种常见方法。

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。