交换函数的功能:交换两个变量的值
以下是要实现对两个变量值的交换的三种方法:
#include <stdio.h>
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void Swap1(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void Swap2(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
int main()
{
int a = 10;
int b = 20;
Swap(&a, &b);
printf("%d %d", a, b);
/*Swap1(&a, &b);
printf("%d %d", a, b);*/
/*Swap2(&a, &b);
printf("%d %d", a, b);*/
return 0;
}
其中,Swap()借助了第三方,Swap1()是通过数学的方法实现了两个值的交换,而Swap2()是借助了运算符的按位异或。这是实现两个值的交换方法,那么对于数组而言实现数组中值的逆序输出也可使用上述的方法。
#include <stdio.h>
void Reverse(int arr[], int len)
{
int i=0;
int j=len-1;
while(i<=j)
{
Swap(&arr[i], &arr[j]);
//Swap1(&arr[i], &arr[j]);
//Swap2(&arr[i], &arr[j]);
i++;
j--;
}
}
void Show(int *arr, int len)
{
for(int i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
Reverse(arr, sizeof(arr)/sizeof(arr[0]));
Show(arr, sizeof(arr)/sizeof(arr[0]));
return 0;
}
这里的Swap()就是上一段中的,对于我们给出的奇数个值的数组而言,数组中的不借助第三方变量的交换函数,不会出现问题;但如果是奇数个值进行逆置,当i和j同时指向同一个位置的变量时,此时调用上述交换函数,则结果出错。