交换两个整数(形参和实参的用法)

您所在的位置:网站首页 用c语言将两个数交换 交换两个整数(形参和实参的用法)

交换两个整数(形参和实参的用法)

2024-07-08 05:37| 来源: 网络整理| 查看: 265

提出问题:

示例:设计一个交换两个整数的算法。

(这个题看似简单,实际上是有一些坑的 ,考察形参和实参的用法,记得当时刚学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