交换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授权后发布,版权归原作者所有。
该平台仅提供信息存储服务。
本文仅代表作者个人观点,不代表本平台的立场,如有任何疑问,请与我们联系,谢谢!