网易公开课学习,C语言的一个通用内存交换函数,然后自己又写了个指针的交换函数,在VC2010下创建一控制台程序,编译通过:
#include <malloc.h>
void swap2( void ** app, void ** bpp);
{
int a,b;
a = 10;
b = 20;
void *ap,*bp; //可以定义成 int *ap,*bp,这样输出时可以不用转换,但swap2调用时参数需要加上(void **)进行转换
ap = &a;
bp = &b;
printf("\n1、before swap\n");
printf("a=%d,b=%d\n",a,b);
printf("*ap=%d,*bp=%d\n",*(int *)ap,*(int *)bp);
swap2(&ap,&bp);
printf("after swap\n");
printf("a=%d,b=%d\n",a,b);
printf("*ap=%d,*bp=%df\n",*(int *)ap,*(int *)bp);
printf("\n2、swap a b\n");
printf("a=%d,b=%d\n",a,b);
swap(&a,&b,sizeof(int));
printf("a=%d,b=%d\n",a,b);
char stra[] = "abcdefghi";
char strb[] = "123456789012";
void * strap = stra;
void * strbp = strb;
printf("\n3、before swap\n");
printf("stra=%s,strb=%s\n",stra,strb);
printf("strap=%s,strbp=%s\n",(char *)strap,(char *)strbp);
swap2(&strap,&strbp);
printf("after swap\n");
printf("stra=%s,strb=%s\n",stra,strb);
printf("strap=%s,strbp=%s\n",(char *)strap,(char *)strbp);
printf("\n4、swap stra strb,only swap 7 chars\n");
printf("stra=%s,strb=%s\n",stra,strb);
swap((void*)stra,(void*)strb,7);
printf("stra=%s,strb=%s\n",stra,strb);
}
**通用内存交换函数,实现内存中的内容互换
**ap、bp为需交换的内存块首地址
**size 为交换内存块长度
*/
void swap( void * ap, void *bp,int size) {
void *temp;
temp = malloc(size);
memcpy(temp,ap,size);
memcpy(ap,bp,size);
memcpy(bp,temp,size);
free(temp);
}
**两个指针指向地址互换
*/
void swap2( void ** app, void ** bpp) {
void * tmp = *app;
*app = *bpp;
*bpp = tmp;
}