0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C基础:交换a、b值较好的方法?

工程师 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2020-10-16 11:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

交换a、b的值在C语言的学习中是很常见的问题。最常用的方法就是引入一个中间变量当做中间介质来交换a、b的值。

代码如下:

void change_ab(int *a, int *b){ int temp = 0; temp = *a; *a = *b; *b = temp;}

!!注意不能写为:

void change_ab(int a, int b){ int temp = 0; temp = a; a = b; b = temp;}

普通的变量传递,则不会改变内存内容,以为普通变量作为参数时,其实是在内存块(栈空间)中新申请了一块空闲块,不是原来的内存块,而函数调用完毕之后,这块新申请的内存块会由于变量的作用域失效而被系统回收。

如果把指针作为实参进行传递,也就是把内存地址传了过去,那么操作这个指针所指向的内存块,必然会改变这个内存的内容了。

以上这种方法就是最常见的方法。那么,你知道如何将a、b的值进行交换,并且不使用任何其他的中间变量?

方法一:采用算术的方法

void change_ab(int *a, int *b){ *a = *a + *b; *b = *a - *b; *a = *a - *b;}

方法二:采用异或的方法

void change_ab(int *a, int *b){ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b;}

方法一存在一个潜在的危险,当形参的类型改为无符号16位时,若a、b的值很大,那么a+b的值就有可能超出16位整数所能表示的范围,从而造成程序运行错误。方法二则没有这个问题,这是一种比较好的方法。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7646

    浏览量

    146113
  • 编程
    +关注

    关注

    90

    文章

    3723

    浏览量

    97430
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PIC16C63A/65B/73B/74B微控制器:功能、特性与应用全解析

    PIC16C63A/65B/73B/74B微控制器:功能、特性与应用全解析 在电子工程师的日常工作中,选择合适的微控制器是设计成功的关键。今天,我们就来深入探讨PIC16
    的头像 发表于 04-07 16:40 160次阅读

    深入剖析PIC16C63A/65B/73B/74B微控制器:特性、应用与开发

    深入剖析PIC16C63A/65B/73B/74B微控制器:特性、应用与开发 在电子工程师的世界里,选择合适的微控制器是项目成功的关键。PIC16C
    的头像 发表于 04-07 15:20 121次阅读

    PI7C8152A与PI7C8152B 2端口PCI - PCI桥接器:设计利器

    PI7C8152A与PI7C8152B 2端口PCI - PCI桥接器:设计利器 在电子设计领域,PCI - PCI桥接器是实现PCI总线扩展与设备连接的关键组件。今天,我们就来深入探讨
    的头像 发表于 03-31 16:05 128次阅读

    SGM790A/B/C 双负载检测器:低功耗负载检测的理想之选

    SGM790A/B/C 双负载检测器:低功耗负载检测的理想之选 在电子设备的设计中,负载检测是一项至关重要的功能,它能够帮助系统实时了解负载的连接或移除状态,从而实现电源的智能管理。今天,我们就来
    的头像 发表于 03-24 09:15 445次阅读

    高效降压DC-DC转换器MAX5090A/B/C的设计与应用

    高效降压DC-DC转换器MAX5090A/B/C的设计与应用 引言 在电子设计领域,DC-DC转换器是不可或缺的关键组件,它们能够将输入电压转换为适合各种电子设备使用的稳定输出电压。MAX5090
    的头像 发表于 03-13 16:05 414次阅读

    PCA9543A/43B:2通道I²C总线开关的全面解析

    PCA9543A/43B:2通道I²C总线开关的全面解析 在电子设计领域,I²C总线开关是实现多设备通信和总线管理的关键组件。NXP的PCA9543
    的头像 发表于 02-02 10:45 556次阅读

    深度解析SPL阶段A/B分区启动:spl_ab.c代码全拆解

    ( Secondary Program Loader ,二级程序加载器)作为系统启动的早期阶段,负责初始化硬件、选择启动分区, spl_ab.c 正是 SPL 层处理 A/B 分区启动的核心代码。本文将从函数
    的头像 发表于 01-20 07:07 1w次阅读
    深度解析SPL阶段<b class='flag-5'>A</b>/<b class='flag-5'>B</b>分区启动:spl_ab.<b class='flag-5'>c</b>代码全拆解

    德州仪器LM5100A/B/C和LM5101A/B/C系列高压栅极驱动器的深度解析

    德州仪器LM5100A/B/C和LM5101A/B/C系列高压栅极驱动器的深度解析 在电源电路设
    的头像 发表于 01-11 18:05 1172次阅读

    高压栅极驱动器LM5100A/B/C和LM5101A/B/C:设计与应用详解

    高压栅极驱动器LM5100A/B/C和LM5101A/B/C:设计与应用详解 在电子电路设计中,
    的头像 发表于 01-11 17:55 1193次阅读

    深入剖析LM5100A/B/C与LM5101A/B/C高压栅极驱动器

    深入剖析LM5100A/B/C与LM5101A/B/C高压栅极驱动器 引言 在电子设计的领域中,
    的头像 发表于 01-11 17:55 1184次阅读

    Texas Instruments LM5100A/B/C和LM5101A/B/C高压栅极驱动器深度解析

    Texas Instruments LM5100A/B/C和LM5101A/B/C高压栅极驱动器
    的头像 发表于 01-11 17:45 1266次阅读

    深度剖析LM5100A/B/C与LM5101A/B/C高压栅极驱动器

    深度剖析LM5100A/B/C与LM5101A/B/C高压栅极驱动器 在电子设计领域,高压栅极驱
    的头像 发表于 01-11 17:45 1201次阅读

    深入剖析LM5100A/B/C和LM5101A/B/C高压栅极驱动器

    深入剖析LM5100A/B/C和LM5101A/B/C高压栅极驱动器 作为一名电子工程师,在设计
    的头像 发表于 01-11 17:40 1145次阅读

    三星0603贴片104电容电压怎样识别?

    CL10B104KB8NNNC。其中,电压由特定位置的字母或数字组合表示: 字母代码对应电压 电压常用单个字母标注,对应关系如下: A
    的头像 发表于 09-25 18:02 1345次阅读
    三星0603贴片104电容电压<b class='flag-5'>值</b>怎样识别?

    请问ISM 交换机如何恢复出厂

    请问ISM 交换机如何恢复出厂
    发表于 08-07 06:35