首页 > 技术文章 > 常见误区(一)

starainDou 2015-08-09 13:48 原文

无论是C/C++,还是java,默认情况是值传递,这就造成编写一般意义认为正确的交换两数的方法成为错误的。

C++中可用指针或者引用方式避免

#include<iostream>
using namespace std;

//一般认为,但是由于传过去的是两个值,所以变量值不改变
void swap1(int a ,int b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
	
}

//采用引用的方法,书写简单易懂
void swap2(int &a,int &b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

//采用指针方式
void swap3(int *a,int *b)
{
	int temp = *a;
	*a = *b;
	*b =temp;
}
int main()
{
	int swapa = 10;
	int swapb = 20;
	int swapc = 10;
	int swapd = 20;
	int swape = 10;
	int swapf = 20;
	swap1(swapa,swapb);
	cout<<"swapa原来10,现在为:"<<swapa<<endl<<"swapb原来20,现在为:"<<swapb<<endl;
	swap2(swapc,swapd);
	cout<<"swapc原来10,现在为:"<<swapc<<endl<<"swapd原来20,现在为:"<<swapd<<endl;
	swap3(&swape,&swapf);
	cout<<"swape原来10,现在为:"<<swape<<endl<<"swapf原来20,现在为:"<<swapf<<endl;
	
	system("pause");
}

 

可以看出直接编写的swap1()方法是无法完成任务的。

但是采用引用或者是指针的形式是行得通的。

 

推荐阅读