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

    文章

    7642

    浏览量

    144632
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    吉时利2602A KEITHLEY2602B 2611B 数字源表

    吉时利2602A  KEITHLEY2602B 2611B  数字源表 吉时利2602B源表 测量功能 - 双通道型号支持80W输出功率(40W/通道) - 4象限源/测量具有6位半分
    的头像 发表于 02-19 15:02 653次阅读

    MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇-相关产品参数、数据手册,更有
    发表于 01-16 18:48
    MDMF304<b class='flag-5'>A1C</b>9M-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -基本功能规格篇- 松下

    MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇-相关产品参数、数据
    发表于 01-16 18:47
    MDMF304<b class='flag-5'>A1C</b>9M-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -EtherCAT 通信规格篇- 松下

    MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

    电子发烧友网为你提供Panasonic(Panasonic)MDMF304A1C9M-MINAS A6B 系列 (EtherCAT) 标准规格书相关产品参数、数据手册,更有
    发表于 01-16 18:47
    MDMF304<b class='flag-5'>A1C</b>9M-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  标准规格书 松下

    卡诺图与布尔代数的联系

    )、NOT(非)等,这些运算符可以组合起来表示复杂的逻辑关系。 布尔代数的规则包括: 交换律:A AND B = B AND A
    的头像 发表于 01-14 17:15 1168次阅读

    MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇-相关产品参数、数据手册,更有
    发表于 12-25 18:48
    MHMF092<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -基本功能规格篇- 松下

    MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇-相关产品参数、数据手册
    发表于 12-25 18:48
    MHMF092<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -EtherCAT 通信规格篇- 松下

    MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书相关产品参数、数据手册,更有
    发表于 12-25 18:47
    MHMF092<b class='flag-5'>A1C</b>4-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  标准规格书 松下

    MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇-相关产品参数、数据手册,更有
    发表于 12-24 19:01
    MHMF092<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -基本功能规格篇- 松下

    MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 技术资料 -EtherCAT 通信规格篇-相关产品参数、数据手册
    发表于 12-24 19:01
    MHMF092<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -EtherCAT 通信规格篇- 松下

    MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书相关产品参数、数据手册,更有
    发表于 12-24 19:00
    MHMF092<b class='flag-5'>A1C</b>2-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  标准规格书 松下

    三星贴片电容识别容代码方法

    三星贴片电容的容代码识别方法主要基于其型号编码中的特定部分。以下是一个详细的识别步骤和说明:    一、识别容代码的基本步骤    查看型号编码:    三星贴片电容的型号编码通常包含多个部分
    的头像 发表于 12-13 16:17 1320次阅读
    三星贴片电容识别容<b class='flag-5'>值</b>代码<b class='flag-5'>方法</b>

    MHMF084A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇- 松下

    电子发烧友网为你提供Panasonic(Panasonic)MHMF084A1C9M-MINAS A6B 系列 (EtherCAT) 技术资料 -基本功能规格篇-相关产品参数、数据手册,更有
    发表于 12-11 18:40
    MHMF084<b class='flag-5'>A1C</b>9M-MINAS <b class='flag-5'>A6B</b> 系列 (EtherCAT)  技术资料 -基本功能规格篇- 松下