关于Swap函数交换两个变量的值

void Swap(int a ,int b)
{
   int tmp =a;
   a=b;
   b=tmp;
}
int main()
{
  int a = 10,b=20;
  Swap(a,b);
   printf(“%d,%d”a,b);
   return 0;
}
我们发现a b的 值并没有变换。因为上述的a b 仅仅实现了在Swap函数中的交换,对主函数没有变化;

void Swap(int *a ,int b)
{
int
tmp =a;
a=b;
b=tmp;
}
int main()
{
int a = 10,b=20;
Swap(a,b);
printf(“%d,%d”a,b);
return 0;
}

这次代码没有实现的主要原因是:我们只是实现了a b 地址的交换,值却没有改变;

void Swap(int a ,int b)
{
int* tmp ;

  • tmp =*a;
    *a=*b;
    *b=*tmp;
    }
    int main()
    {
    int a = 10,b=20;
    Swap(a,b);
    printf(“%d,%d”a,b);
    return 0;
    }
本质上来看,其实有在传指针和解引用,
但是因为我们没有对刚刚定义并未初始化的指针tmp赋值,tmp是一个野指针;
这个指针可能不存在,也可能不知道指向何处,所以解引用是未知的,必然会
导致系统的崩溃;

接下来看看正确的版本

在这里插入代码片

正确版本
void Swap(int *a ,int* b)
{
   int tmp ;
    tmp =*a;
   *a=*b;
   *b= tmp;
}
int main()
{
  int a = 10,b=20;
  Swap(a,b);
   printf(“%d,%d”a,b);
   return 0;
}
函数里不定义指针,因为解引用后的a是int类型,我们将TMP直接定义为整形类型;

想要通过函数实现变量的改变,必须要传指针,再解引用对其进行操作
同理,我们如果想要对一级指针进行修改, 传指针的地址,也就是二级指针,
然后解引用就ok了!



  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值