大一新生发问:
这个程序中,a和b的值不是交换了嘛,为什么最后结果还是“5-6”?
void swap(int a,int b)函数中是传值,传值对main函数中的数据没有影响。
在main函数中调用swap的时候,会发生一次拷贝操作,也就是让把5传递给swap的形参a,6传递给形参6
所以在swap中操作的是两个新的临时变量a和b,而不是main函数中的a和b,只是swap中a的值等于main中变量a的值,swap中b的值等于main中变量b的值,但是,他们的地址时不一样的,swap中的a和b是编译器重新分配的两个地址。所以在swap中对a和b的操作对main中a和b的值没有影响。
在C语言中,可以通过指针的方式实现交换,传递指针的话,操作的是指针指向的数据,虽然也会发生拷贝,但是他们指向同一块内存。C++同样适用。
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
在C++中引入了引用的概念,所以,也可以使用引用,如下:
void swap(int &a,int &b) //&在这里是引用的意思
{
int t;
t = a;
a = b;
b = t;
}
值参是不能修改参数的,C++的话可以改成引用就行了
void swap(int &a,int &b)就可以了
可以将交换结果输出,或者通过设置静态变量传参/设置全局变量传参/地址传参等