两个交换函数
#include <iostream>
using namespace std;
void swapp(int &m, int &n) {
int tmp = m;
m = n;
n = tmp;
}
void swapq(int *p, int *q) {
int tmp = *p;
*p = *q;
*q = tmp;
}
int main() {
int m = 0;
int n = 1;
cout << "m = " << m << "; n = " << n << endl;
swapp(m, n);
cout << "m = " << m << "; n = " << n << endl;
swapq(&m, &n);
cout << "m = " << m << "; n = " << n << endl;
}
Both functions work, 但太难理解了。先看第一个swapp. 这个调用的时候,是传变量m,n,函数接收的却是m,n的引用,因此做交换的时候,就是把原main函数里面的m,n的值改掉了,这是传引用的函数调用。
再看第二个,调用的时候直接传变量m,n的地址,函数原型接收m,n的地址,并把它们保存在*p,*q 2个指针变量里面,然后是2个指针变量的交换,比较难理解的是,明明是2个指针交换,为什么回到main函数后,编程m、n交换了?