交换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文章
7618浏览量
138698 -
编程
+关注
关注
88文章
3649浏览量
94353
发布评论请先 登录
相关推荐
卡诺图与布尔代数的联系
MHMF092A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF082A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF042A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF041A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF041A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF022A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF022A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF021A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF021A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF012A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF011A1C4-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

MHMF011A1C2-MINAS A6B 系列 (EtherCAT) 标准规格书 松下

高压栅极驱动器LM5100A/B/C LM5101A/B/C数据表

评论