网站首页 > 技术文章 正文
交换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位整数所能表示的范围,从而造成程序运行错误。方法二则没有这个问题,这是一种比较好的方法。
1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!
猜你喜欢
- 2024-10-18 了解C语言中的操作符(c语言操作符怎么定义)
- 2024-10-18 20天轻松入门《C++第二章——程序设计基础》—3经坛教育
- 2024-10-18 C++中的volatile关键字(volatile关键字 c语言)
- 2024-10-18 C/C++软件开发证书怎么考?报考难度大吗?含金量高吗?
- 2024-10-18 c++数据类型(c++数据类型转换)
- 2024-10-18 C语言中实现边沿函数算法及应用,这是抛弃PLC留下的痛!
- 2024-10-18 C++ 避免使用模块重新编译模板库(调用c++模块,不忽略异常)
- 2024-10-18 面试大厂c/c++后台开发岗,如何从技术层面上杀出重围?
- 2024-10-18 关于C语言交换两个数的实现方法以及个人心得
- 2024-10-18 记录有趣的面试题:二进制字符串相加,C++/Java/Python 解法分析
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)