经典例题:交换两个数
2016-05-26 15:46
246 查看
# 交换两个整数的值
/*题目: 包装一个函数,实现交换两个整数的功能,注意:需要以传参的形式去调用函数;
*/
# 这道题看上去是不是很简单! 如果不用包装函数很多人立马就能写出下面的函数;
int main() { int a = 2; int b = 3; int tmp = 0; printf("a = %d b = %d\n",a,b); //注意: printf("a = %d b = %d\n",b,a);这样可不行;属于换汤不换药; tmp = a; a = b; b = tmp; printf("a = %d b = %d\n",a,b); system("pause"); return 0; }
@ 这样肯定没问题了,可是问题是要包装一个函数实现,那还不简单,不就是穿个参数嘛! 于是乎,立马写出下面
的代码:
@ 看结果是不是你想要的? 显而易见,这并没有实现两个数的值的交换, 那么问题出在哪里呢?
这就看出你对函数的使用不太熟练了, 函数的参数有两种形式,传值和传址,而想要通过传参的形式改变变量的值,
就只有传址的形式,因为参数传到Swap函数只是原来变量的一份临时拷贝,你直接传值过去,在函数里改变的只是
临时变量的值,而变量本事没有发生改变;而已传址的方式,传递过去参数的地址,通过访址的形式在内存中改变
原来的值才可以,这又牵扯到指针的运用;下面我画图分析一下!
# 传值形式
# 传址形式:
# 传址方式的代码实现:
#include<stdio.h> #include<stdlib.h> void Swap(int *a,int *b) { int tmp = 0; tmp = *a; *a = *b; *b = tmp; } int main() { int a = 2; int b = 3; Swap(&a,&b); printf("a = %d b = %d\n",a,b); system("pause"); return 0; }
@结果:
到这里就完成了!
相关文章推荐
- 交换两个数的值
- 两个数的交换
- 汇编-通过子程序交换两个内存变量
- 简单的交换两个变量的数值
- 用多种方法交换两个数的值
- 异或运算交换两个数
- 传值和传址
- 如何做到不用中间变量来交换两个数的值
- Cloudera Manager(CDH5)内部结构、功能包括配置文件、目录位置等
- C语言指针杂记
- java NIO
- 便签1
- 罗马数字和整数相互转换
- HTML5 - 使用JavaScript控制<audio>音频的播放
- JMS学习(二)
- Android插件化探索(二)资源加载
- 一个Android Socket的例子
- ecshop数据库操作函数
- C 语言字符数组的定义与初始化
- Android组件WebView编写有道词典小案例分享