C编程,通过指针来交换a,b值—易错点

这篇文章记录一个易错点

如果要通过函数来实现a,b值的交换,我们应该都知道下面这个例子应该是实现不了的:

//以传值的方式来调用函数
void swap(int a,int b)
{
    int temp;
    temp = a;
    a    = b;
    b    = temp;
}

因为参数传递采用的是传值方式,上面的函数不会影响到调用它的例程中的a和b的值。

我知晓上面这个知识点,所以我采用的是指针,传递地址的方式来调用函数,但是没想到我还是错了,我使用了下面这个函数,大家不妨来看看:

//拟定采用的指针传递地址的方式
void swap(int *a,int *p)
{
    int *temp;
    temp = a;
    a = b;
    b = temp;
}

猛地一看,认为这个方式应该也能够实现a,b交换的功能,其实这个函数和上面那个没有实质区别,最后还是实现不了。

正确的函数应当是这样的:

//正确的指针使用方式
void swap(int *a,int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

为了验证我说的是正确的,我做了这个测试:

补充:

因为最近在学习C++,所以用C++也写了一个交换的函数,这里采用传引用的方式,同样能够达到效果:

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值