網易公開課學習,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;
}