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授权后发布,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者个人观点,不代表本平台的立场,如有任何疑问,请与我们联系,谢谢!

联系方式

自1984年起,久尹开始研发并制造质量可靠的电子元件及相关设备 并以创新的设计技术在机械设备上增加良好的使用者界面,因此成为全球被动零件领域的知名设备制造商。 久尹一直凭借着诚实、负责与积极的心态去克服各项挑战,让团队得以建立核心能力与价值。久尹的团队拥有机械设计技术、实际的全球性代工经验、优质的概念以及与国际市场的交流及互动能力。这些竞争优势为久尹及其所有的合作伙伴提供了亮丽的未来,并能够在多变的环境与市场下继续保持领先地位。

查看详情

在线咨询