交换两个整数(形参和实参的用法) |
您所在的位置:网站首页 › 用c语言将两个数交换 › 交换两个整数(形参和实参的用法) |
提出问题:
示例:设计一个交换两个整数的算法。 (这个题看似简单,实际上是有一些坑的 ,考察形参和实参的用法,记得当时刚学C时也是踩过这个坑,所以在这里记下来加深一遍印象) 编写一个函数swap1(x,y): void swap1(int x, int y) { int temp; tmp = x; x = y; y = tmp; //交换形参x和y的值 }当执行语句swap1(a,b)时, a和b实参值不会发生交换。 分析: x, y 即是输入型参数,也是输出型参数 改正方法1:采用指针的方式来 回传形参的值,需要把上述函数修改为: /* 交换形参x和y所指向的值 */ void swap2(int *x, int *y) { int tmp; tmp = *x; //将x的值放在tmp中 *x = *y; //将x所指的值改为*y *y = tmp; //将y所指的值改为tmp }在调用时,上述函数改为swap2(&a, &b) ——》比较复杂 改正方法2:采用引用性形参——》将输出型形参改为引用类型。 /* 交换形参x和y的值 */ void swap(int &x, int &y) //形参前的“&”符号不是指针运算符 助理需要注意一下 { int tmp = x; x = y; y = tmp; }当执行语句swap(a,b)时,形参和实参的匹配相当于: int &x = a ; //a为x的引用 int &y = b; //b为y的引用 这样,a与x共享存储空间,b与y共享存储空间,因此执行函数后a和b的值发生了交换——》简单 后续思考 普通的参数值传递 //fun1() void fun1(int n) { int m =2; fun2(m); printf("%d\n",m); } //fun2() void fun2(int x) { x++; printf("%d\n",x); }从实参到形参的单向值传递 fun1(m) ——————————》fun2(x) 引用类型的参数传递 //fun1() void fun1(int n) { int m =2; fun2(m); printf("%d\n",m); } //fun2() void fun2(int %x) { x++; printf("%d\n",x); }从实参到形参的单向值传递 fun1(m) ——————————》fun2(x) fun1(m) 《—————————— fun2(x) 形参回传给实参,实参和形参同步发生改变 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |