用C写第一个交换函数swap&&升级版

如何写一个交换函数

案例介绍

初级版

 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
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/qq_38179373/article/details/107453581