Swap程序的通用版本

时间 : 14-12-08 栏目 : linux编程 作者 : 老薛 评论 : 0 点击 : 1,520 次

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<assert.h>

void Swap(void *p1,void *p2,unsigned int uElemSize);   //用(void *)来指代任何类型

int main()
{
struct student{
char ID;
char name[20];
int score;
}stu1={'a',"huang",89},stu2={'b',"lixiang",98};

printf("交换之前:\n");
printf("%c %s %d\n",stu1.ID,stu1.name,stu1.score);
printf("%c %s %d\n",stu2.ID,stu2.name,stu2.score);

printf("\n交换之后:\n");
Swap(&stu1,&stu2,sizeof(stu1));
printf("%c %s %d\n",stu1.ID,stu1.name,stu1.score);
printf("%c %s %d\n",stu2.ID,stu2.name,stu2.score);
system("pause");
return 0;
}
/* uElemSize 两者中最大的字节数
* 开辟(char *)的字节空间来作为辅助交换
* 用string函数memcpy()进行内存复制
*/
void Swap(void *p1,void *p2,unsigned int uElemSize)
{
assert(NULL != p1 && NULL != p2 && uElemSize > 0);
if(NULL == p1 || NULL == p2 || uElemSize <= 0)
return;

char * pBuffer = (char*)malloc(uElemSize);

memcpy(pBuffer,p1,uElemSize);
memcpy(p1,p2,uElemSize);
memcpy(p2,pBuffer,uElemSize);

free(pBuffer);
}

说明:assert()断言是防御性编程经常用的技巧,对于小程序没必要这么用,但平时多
用也是为了能够养成一个好的编程习惯。

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/xtyw003/478.html

随便看看

0