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

    关注

    180

    文章

    7528

    浏览量

    128303
  • 编程
    +关注

    关注

    88

    文章

    3439

    浏览量

    92371
收藏 人收藏

    评论

    相关推荐

    交换芯片DP模块怎么用

    交换芯片DP(Data Point)模块的使用方法通常涉及以下几个步骤。
    的头像 发表于 03-22 16:20 242次阅读

    如何使用内在函数 __crc32 (uint32b、uint32a)?

    ,如果 b = 0x0000000,我就能从给定的参数 a 中得到正确的 crc 返回。 例如 b = 0x00000000 a = 0x
    发表于 01-25 06:50

    直流电机转子跟碳刷之间打火有什么比较好的处理方法

    直流电机转子跟碳刷之间打火有什么比较好的处理方法,直流电机用的时间大概在3年
    发表于 12-27 06:13

    ADE7758电压和电流如何校准?校准步骤?

    最近自己搭了一个检测A相电压的ADE7758电路。有几个问题: 1、IRQ中断问题:在B相和C相上出现过零检测超时时都能都检测到对应的中断(大约2.3秒出现一次中断),唯独A相没有出
    发表于 12-26 06:35

    如果要使AD9238的输入量程变为+/-5V,采用什么方法较好

    请教各位高手:现打算用三片AD9238构建一个6通道高速采集系统,而FPGA的IO口有限,所以将三片AD9238数据总线并联,用FPGA控制各个ADC的OE引脚,分时读取数据有没有的问题? 另外,如果要使AD9238的输入量程变为+/-5V,采用什么方法较好? 期待
    发表于 12-22 06:31

    三层交换机VLAN路由的配置方法

    掌握vlan路由技术之三层交换机vlan路由的配置方法和结果验证。
    的头像 发表于 12-15 11:11 980次阅读
    三层<b class='flag-5'>交换</b>机VLAN路由的配置<b class='flag-5'>方法</b>

    AD7655可以得到A1,B1通道的数据,无法得到A2B2的数据是为什么?

    同一个数据(是基本等于A1的); B1和B2都是同一个数据(是基本等于B1的),也就是数据
    发表于 12-15 07:08

    网管交换机的基本配置方法

    交换机一般分为网管型和非网管型2大类,网管交换机功能较强大,支持VLAN划分,组网灵活,可以有效的对网络进行控制和管理,但操作比较复杂,一般需要配置才能正常工作。下面就拿一个交换机对其2个网口进行配置的实际操作,让它们可以互相访
    的头像 发表于 12-07 10:16 957次阅读
    网管<b class='flag-5'>交换</b>机的基本配置<b class='flag-5'>方法</b>

    AD7655可以获取A1、B1、A2、B2的采样,但是数值存在差异的原因?

    AD7655可以获取A1、B1、A2、B2的采样,但是数值存在差异; 四个通道同时采集0V时,A
    发表于 12-07 06:26

    python中如何交换两个数的值相加

    数的值,并对其应用进行详细解析。 一、变量交换原理解析 传统方式 在Python中,交换两个数的值通常可以使用一个临时变量进行操作。假设有变量a和b,要实现交换,可以通过如下代码实现: temp = a a = b b = te
    的头像 发表于 11-29 17:29 349次阅读

    python编程交换a和b的值

    交换a和b的值是编程中的一个基础操作。在Python中,有多种方法可以实现这个任务。本文将详细介绍几种常见的交换方法,并给出具体的示例代码。 方法
    的头像 发表于 11-22 10:58 2284次阅读

    python中如何交换两个数的位置

    在Python中,我们可以使用多种方法交换两个数的位置。下面将详细介绍这些方法,并提供示例代码和解释。 方法一:使用临时变量进行交换 这是
    的头像 发表于 11-22 10:56 1269次阅读

    基于FPGA的线性插-上

    1,背景 利用FPGA做数据处理、系统控制时,经常需要做线性插。如图(1)所示,给点AB的x,y坐标,需要求A,B中间某一点
    发表于 11-20 23:10

    对应MCU的flash擦除,有什么比较好方法可以快速擦除?

    对应MCU的flash擦除,有什么比较好方法可以快速擦除
    发表于 10-15 10:25

    7种方法教您怎么进步电感Q

    7种方法教您怎么进步电感Q 7种方法教您怎么进步电感Q电感Q指的是电感质量因素,一般来说,电感Q
    发表于 05-19 15:08