C代码交换a,b值的方式不一样

请注意,为官方帐户加注星标,不要错过令人兴奋的内容。

转移自:嵌入式Hodgepodge交换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 ++中的字符编码转换教您如何使用STM32Trust生成加密的固件。

ELF与十六进制和Bin文件格式有什么区别?关注微信公众号“ strongerHuang”,回复“ 1024”。

在后台查看更多内容,请在“按照规定加入技术交流小组。

长按以跟随图片中包含的官方帐户。

免责声明:本文内容经21ic授权后发布,版权归原作者所有。

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

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