C语言实现两个数互换--经典指针程序分析

一、直接实现

当需要采用C语言对两个数进行互换时,最先想到的是在程序中引入一个辅助变量进行实现,程序如下:在这里插入图片描述
运行结果如下,能成功实现互换:
在这里插入图片描述
由于这种实现方式复用性不高,虽然能实现互换功能,但是实际使用时并不方便。要想提高程序的复用性,应使用函数实现。

二、使用函数实现

1、错误程序1

在这里插入图片描述

此时能编译成功,运行结果如下:
在这里插入图片描述
可见,这并不是预期结果,可从程序执行过程对其进行分析
(1)程序从main函数开始执行,对变量a、b进行初始化,系统为变量a、b分配内存空间。
(2)程序运行到函数swap_1(a, b),此时系统为函数中的形参a、b分配内存空间(注意:函数中的a、b为形参,不同于主函数中的a、b)。函数内部对a、b进行互换,此时形参a、b发生改变。函数执行结束后,形参a、b不再存在。
(3)打印a、b值,a、b仍为main函数中的a、b。

2、错误程序2

在这里插入图片描述
此程序中使用指针进行互换操作,但是实际互换的只是p、q的值。程序运行时变量a、b、p、q的内容如下图所示,函数执行只是互换其中p、q的值,即将p和q中所存的值进行了互换,a、b变量值并未发生变化。
互换之前
在这里插入图片描述
互换之后
在这里插入图片描述

3、正确程序在这里插入图片描述

运行结果如下:
在这里插入图片描述
p是int *类型,*p是int类型,所以t为int类型。*p、*q等价于a、b,所以此程序交换的是a、b变量的值。

可见,只有通过这种方式才能真正做到实现两个数的互换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值