int main(int argc, const char * argv[]) {很明显,这样的结果肯定是错的,因为a和b只是形参,交换两个地址对主函数的x和y并没有什么作用,甚至连x和y的地址都不会改变。如果一定要用指针作为参数,可以像下面这样,交换a和b指向的值,可是这样和不用指针也没啥区别了。
// insert code here...
int x = 3;
int y = 5;
Swap(&x,&y);
cout<<x<<endl;
cout<<y<<endl;
return 0;
}
void Swap(int *a,int *b){
int *temp;
temp = a;
a = b;
b = temp;
}
void Swap(int *a,int *b){ int temp; temp = *a; *a = *b; *b = temp;}而C++里面有个概念叫引用变量,也就是为原变量起一个别名,使用情况像下面这样
int main(int argc, const char * argv[]) { // insert code here... int x = 3; int y = 5; swap(x, y); cout<<x<<endl; cout<<y<<endl; return 0;}void swap(int &x,int &y){ int temp; temp = x; x = y; y = temp;}
这样就能够成功交换x和y的值。
为什么会有不同的效果呢,按照我个人的理解是,上面的局部变量a和b只是相当于新建一个指向x和y的指针,只是交换a和b指针地址的值并不能改变x和y的地址的指向,所以x和y的值还是没有改变。
而采用引用的话,实际上就是创建一个指针指向主题函数中的x和y,然后在操作的就是这个指针指向的值。这样才能改变主体函数中x和y的值。
以上仅仅是个人的理解,方便自己理解代码,也有可能实际并不是我想的这样,仅供参考!