如何写一个交换函数
案例介绍
初级版
void swap(int *p1, int *p2)
{
int temp;
temp = *p1; *p1 = *p2; *p2 = temp;
}
高级版(使用库函数)
#include <stdlib.h>
#include <string.h>
int swap1(void *x, void *y, int size)
{
void *temp; //定义一个空指针
if((temp = malloc(size)) == NULL)
return -1;
memcpy(temp, x, size); memcpy(x, y, size); memcpy(y, temp, size); //申请一个大小为size大小的内存
free(temp); //释放内存
return 0;
}
程序关键点
- 两个头—#include <stdlib.h>,#include <string.h>
- 申请一个大小为size的内存赋值给temp
- 交换值
- 释放内存
高级版(不使用库函数)
void byte_swap(void *pData1, void *pData2, size_t stSize)
{
unsigned char *pcData1 = pData1;
unsigned char *pcData2 = pData2;
unsigned char ucTemp;
while (stSize--){
ucTemp = *pcData1; *pcData1 = *pcData2; *pcData2 = ucTemp;
pcData1++; pcData2++;
}
}
参数详细说明
- 初级版不详细说明(主要是数据进行交换,temp作为临时变量)缺点:只能转化int类型的函数(因为定义类型为int)。
- 问题来了我想写一个函数可以适用所有数据类型怎么办呢???
- 高级版对初级版进行了抽象升级,首先将两个输入参数类型为 void *(ps:就是定义一个空指针),这样就可以传入所有类型的变量,int size 就是交换的数据的大小。
函数分析:我们边可以定义一个空指针temp和mallo配合使用
memcpy(temp, x, size); memcpy(x, y, size); memcpy(y, temp, size);
这段就是数据交换函数,记得最后要使用free函数释放指针。
仿真测试&结果
#include <stdio.h>
#include <string.h>
void swap(int *p1, int *p2)
{
int temp;
temp = *p1; *p1 = *p2; *p2 = temp;
}
int swap1(void *x, void *y, int size)
{
void *temp;
if((temp = malloc(size)) == NULL) //申请一个大小为sizi的内存
return -1;
//交换函数
memcpy(temp, x, size); memcpy(x, y, size); memcpy(y, temp, size);
free(temp);
return 0;
}
int main(int argc, char *argv[])
{
int iNum = 0x11223344;
int iNum1= 0x44332211;
printf("%8x,%8x\n",iNum,iNum1);
swap(&iNum,&iNum1);
printf("%x,%x\n",iNum,iNum1);
swap(&iNum,&iNum1);
printf("%x,%x\n",iNum,iNum1);
swap1(&iNum,&iNum1,1);
printf("%x,%x\n",iNum,iNum1);
}
结果如下
11223344,44332211
44332211,11223344
11223344,44332211
11223311,44332244
请按任意键继续. . .