Swap函数几种常见错误 15_3_17

  • Post author:
  • Post category:其他

正确使用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