正确使用Swap函数交换两数:
#include <stdio.h> void Swap(int *p1,int *p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int a = 10; int b = 20; Swap(&a,&b); printf("%d,%d\n",a,b); }
代码实现结果如下:
分析如下图:
下面看看几种常见错误:
Error1:
#include <stdio.h> void Swap_err1(int a,int b) { int tmp = a; a = b; b = tmp; } int main() { int a = 10; int b = 20; Swap_err1(a,b); printf("%d,%d\n",a,b); }
代码实现结果如下:
a,b 的值并未发生交换。因为当程序执行到:Swap_err1(&a,&b);系统为局部变量a,b, tmp 分配内存空间。
当子函数块执行结束后,子函数中a,b生命周期结束。所以不改变主函数中a,b的值。
Error2:
#include <stdio.h> void Swap_err2(int *p1,int *p2) { int *tmp = p1; p1 = p2; p2 = tmp; }
int main() { int a = 10; int b = 20; Swap_err2(&a,&b); printf("%d,%d\n",a,b); }
代码实现结果如下:
分析如下图:
只交换p1,p2 的值,a,b的值没发生改变。
Error3:
#include<stdio.h> void Swap_err3(int *p1,int *p2) { int *tmp;//野指针 *tmp = *p1; *p1 = *p2; *p2 = *tmp; } int main() { int a = 10; int b = 20; Swap_err3(&a,&b); printf("%d,%d\n",a,b); }
程序崩溃。出现如下警告:
warning C4700: 使用了未初始化的局部变量“tmp”
转载于:https://www.cnblogs.com/wumo66/p/4351426.html