用函数Swap实现a,b交换 要实现a.b的交换,不用函数,我们这样写当然是可以实现的: int main() { int a = 10; int b = 20; int tmp = a; a = b; b = tmp; printf("%d,%d\n",a,b); return 0; } 那用函数Swap要怎么写呢? 一、下面我给出正确的代码: void Swap(int* p1, int* p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int a = 10; int b = 20; Swap(&a,&b); printf("%d,%d\n",a,b); return 0; } 用指针访问储存两个整数的内存空间,实现交换 二、在完成这个代码时,可能会出现很多雷区,下面我将可能出现的错误例子也列举出来: (1) void Swap_err1(int a, int b)//error 错误 { int tmp = a; a = b; b = tmp; } 仅在Swap 函数里面交换了a,b的值(即只交换了形参的值),对main函数没有影响,输出结果依然是a=10,b=20; (2) void Swap_err2(int* p1, int* p2)//error,没有解引用 { int* tmp; tmp = p1; p1 = p2; p2 = tmp; } p1指&a(对a取址),函数交换的是形参的指向,但a,b并没有交换;如图: (3) void Swap_err3(int* p1, int* p2) { int* tmp;//野指针 *tmp = *p1;//崩溃 *p1 = *p2; *p2 = *tmp; } 野指针,又称悬挂指针,就是指针指向的位置不可知(随机的)。但野指针不同于空指针,空指针是值为null的指针,野指针会指向一段实际的内存。 这里tmp指针没有初始化,所以为野指针,此时解引用就是去访问了一个不确定的地址,程序会崩溃。