常见误区(一)
无论是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()方法是无法完成任务的。
但是采用引用或者是指针的形式是行得通的。