关于两个数交换
来源:互联网 发布:知乎 安卓下载 编辑:程序博客网 时间:2024/05/16 17:17
关于两个数交换
下面5个函数,哪个能成功交换两个数?
第一个函数
void swap1(int p, int q) { int temp = p; p = q; q = temp;}
很明显不能交换两个数。尽管局部变量被交换了,但是随着局部变量生命周期的结束,不会影响主函数的a,b值。
第二个函数
void swap2(int *p, int *q) { int *temp; *temp = *p; *p = *q; *q = *temp;}
不能交换,注意int *temp;新建了一个指针,但是没有给指针分配内存,也就是说指针现没有指向实际的地址。*temp = *p;是把*p指向内存里的值赋给*temp指向的内存中,这块内存由于是随机分配的,在函数结束后不会收回,容易造成内存泄漏。在有的编译器中,代码会报错。
比如,我在DevC++中测试就报错了。
第三个函数
void swap3(int *p, int *q) { int *temp; temp = p; p = q; q = temp;}
这里的int *temp;也存在内存泄漏的问题。这个函数实现的功能是,局部变量指针的交换。在函数结束后,主函数的指针依旧指向原来的地址,所以不能实现交换。
第四个函数
void swap4(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp;}
能交换,定义一个临时变量temp,temp存储的值是*p指向的内存中的值。然后交换*p指向内存的值和*q指向内存的值。之所以能实现两个数交换,是因为修改了指针所指向的地址中的值。
第五个函数
void swap5(int &p, int &q) { int temp; temp = p; p = q; q = temp;}swap5(a, b);
能交换,传递的是引用参数,与swap4类似。
阅读全文
0 0
- 关于两个数交换
- 关于两个数的交换
- 关于交换两个数的思考
- 两个数交换算法
- swap-交换两个数
- 交换两个数
- 交换两个数
- swap() 交换两个数
- 两个数的交换
- 直接交换两个数
- 两个数的交换
- 就地交换两个数
- 交换两个数
- python交换两个数
- 交换两个数
- 交换两个数
- 两个数实现交换
- Qt_C++交换两个数
- 【异步请求相关知识点】response.getWriter().write()和 response.getWriter().print()的区别
- ImportError: No module named win32api
- Mac上Anaconda+Tensorflow安装
- PHP简易商城(二)PHP运行sql文件安装数据库
- yield在大循环中需要注意的一个情况
- 关于两个数交换
- 【异步请求相关知识点】flush()缓冲区强制写出
- angular4子路由&辅助路由
- java运算符,>>,>>>,<<
- windows 10 安装composer 出错
- 提高Eclipse启动速度的办法
- 【Docker构建】- Nginx创建带Nginx服务的Centos Docker镜像
- 把linux用户添加到其他组
- 2017上半年总结