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

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

3天内不再提示

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

工程师 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2020-10-16 11:18 3545次阅读

交换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语言
    +关注

    关注

    180

    文章

    7618

    浏览量

    138698
  • 编程
    +关注

    关注

    88

    文章

    3649

    浏览量

    94353
收藏 人收藏

    相关推荐

    卡诺图与布尔代数的联系

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

    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)  标准规格书 松下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    高压栅极驱动器LM5100A/B/C LM5101A/B/C数据表

    电子发烧友网站提供《高压栅极驱动器LM5100A/B/C LM5101A/B/C数据表.pdf》
    发表于 03-29 10:36 0次下载
    高压栅极驱动器LM5100<b class='flag-5'>A</b>/<b class='flag-5'>B</b>/<b class='flag-5'>C</b> LM5101<b class='flag-5'>A</b>/<b class='flag-5'>B</b>/<b class='flag-5'>C</b>数据表

    FLUKE 192B - 196B/C - 199B/C用户手册

    FLUKE 192B - 196B/C - 199B/C 用户手册
    发表于 03-19 10:59 5次下载