下面5个函数哪个能够成功进行两个数的交换?
分析下面5个函数,用于了解值传递/指针传递/引用传递的使用方法。
#include<iostream>
using namespace std;
void swap1(int p, int q);
void swap2(int* p, int* q);
void swap3(int* p, int* q);
void swap4(int* p, int* q);
void swap5(int& p, int& q);
int main() {
int a = 1, b = 2;
//swap1(a, b);
//swap3(&a,&b);
//swap4(&a, &b);
swap5(a, b);
cout << a << " " << b << endl;
// 使得dos界面不闪屏
int i;
cin >> i;
return 0;
}
void swap1(int p,int q) {//值传递
int temp;
temp = p;
p = q;
q = temp;
}
void swap2(int* p,int* q) {//语法错误,空指针
/*
int* temp;
*temp = *p;
*p = *q;
*q = *temp;*/
}
void swap3(int* p, int* q) {//指针传递-指针指向变化
int *temp;
temp = p;
p = q;
q = temp;
}
void swap4(int* p,int* q) {//指针传递-指针指向的值变化
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void swap5(int &p, int &q) {//引用传递
int temp;
temp = p;
p = q;
q = temp;
}
swap1:值传递,a和b是全局变量,不能实现a和b的交换
swap2:指针传递:内存泄漏
swap3:指针传递:不能实现两数的交换,只是指针的变化
swap4:指针传递:可以实现两数的交换,指针指向的内容发生了变化
swap5:引用传递:可以实现两数的交换