久尹 Joyin · 产品与技术资料捷比信主站 · 综合产品与服务
久尹 Joyin保护与温度感测元件
捷比信产品咨询0755-29796190

C基础知识,经典知识:交换a和b值的更好方法?

交换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的值吗?方法1:使用算术方法void change_ab(int * a,int * b){* a = * a + * b; * b = * a- * b; * a = * a- * b;}方法2:使用XOR方法void change_ab(int * a,int * b){* a = * a ^ * b; * b = * a ^ * b; * a = * a * b;}方法1具有潜力当形式参数的类型更改为无符号16位时,如果a和b的值较大,则该值a + b的值可能超出16位整数可以表示的范围,从而导致编程操作错误。第二种方法不存在此问题,这是一种更好的方法。
猜猜您喜欢C语言,嵌入式关键知识:回调函数C编程实践:推箱子游戏1024G嵌入式资源已发布!包括但不限于C / C ++,MCU,Linux等。在官方帐户聊天界面上回复1024,您可以免费获得它!免责声明:本文内容经21ic授权后发布,版权归原作者所有。
该平台仅提供信息存储服务。本文仅代表作者个人观点,不代表本平台的立场,如有任何疑问,请与我们联系,谢谢!。

相关资料

您知道射频电路中电感的匹配方法吗?RTX 3090 Founder Edition显卡8K游戏性能评估,高端体验您知道适合PCIe 5.0的8通道分析仪平台吗?社区医院也正在积极发展智能医疗Lens Technology在智能汽车领域进行布局,其固定增长量为150亿,并将于1月27日推出欧洲工业协会(ECTA)谴责挤出中国5G供应商LED封装支架的原理是什么?魅族POP2s真正的无线耳机正式发布!全面的音质升级占空比上限王成禄:预计今年宏梦OS将在华为手机上正式配备华为公开了一项关于“减速器,动力总成和车辆”的新专利。马斯克对2021年的五项预测:新能源汽车产业和太空探索等。你可以接线吗?您知道如何突破布线水平的瓶颈吗?iQOO U1x价格正式公布:支持18W双引擎闪光灯充电值得学习有关开关电源电感器在PCB设计上的放置方式华为在智能家居生态系统HiLink上发布数据:超过10亿台互联设备中国物联网产业研究报告发布!苹果5G基带路线图曝光:5纳米制程祝福!inDeco荣登“ 2020年中国新基础设施百强创新力量”榜单。Apple iOS 14.1 / iPadOS 14.1正式发布,具有许多新功能