首先一个简单的问题,如何实现交换两个整数的值? 想必每个有编程经验的人都能作答。
C语言用指针实现如下:
void swap(int * a, int * b){
int tmp = *a;
*a = *b;
*b = tmp;
}
C++可以使用引用实现如下:
void swap(int & a, int & b){
int tmp = a;
a = b;
b = tmp;
}
顺便记录另外两个很有意思的实现,不用中间变量tmp (面试中可能会问到):
void swap(int & a, int & b){
a = a + b;
b = a - b;
a = a - b;
}
void swap(int & a, int & b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
然后,言归正传,假如需要实现任意相同类型两数交换值应该怎么办呢? 比如需要交换两整数、两浮点数或者两个字符。这时,为每种情况编写函数实现显得冗余, 可以采用泛型编程的方法。C语言中泛型编程需要用到 void*(指向任意类型的指针), C++中则采用函数模板。
新问题的C语言实现如下: