关于两个数交换
下面5个函数,哪个能成功交换两个数?
第一个函数
void swap1(int p, int q) {
int
很明显不能交换两个数。尽管局部变量被交换了,但是随着局部变量生命周期的结束,不会影响主函数的a,b值。
第二个函数
void swap2(int *p, int *q) {
int *temp;
*temp = *p;
*p = *q;
*q = *temp;
}
不能交换,注意int *temp;新建了一个指针,但是没有给指针分配内存,也就是说指针现没有指向实际的地址。*temp = *p;是把*p指向内存里的值赋给*temp指向的内存中,这块内存由于是随机分配的,在函数结束后不会收回,容易造成内存泄漏。在有的编译器中,代码会报错。
比如,我在DevC++中测试就报错了。
第三个函数
void swap3(int *p, int *q) {
int *temp;
temp = p;
p = q;
q
这里的int *temp;也存在内存泄漏的问题。这个函数实现的功能是,局部变量指针的交换。在函数结束后,主函数的指针依旧指向原来的地址,所以不能实现交换。
第四个函数
void swap4(int *p, int *q) {
int temp;
temp = *p;
*p = *q;
*q
第五个函数
void swap5(int &p, int &q) {
int