鱼C论坛

 找回密码
 立即注册
查看: 1104|回复: 2

[技术交流] 重(chong)视,重(zhong)视形式参数

[复制链接]
发表于 2020-1-7 23:24:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 沉默的人e 于 2020-1-7 23:43 编辑
形参
挖掘本质掌握核心
沉默的人e
谈到函数的时候,不得不说一说函数的形式参数。
大家不是特别重视形式参数与实际参数。很少有能够挖掘出他们的本质的,这需要我们自己理解。理解什么是形式参数实际参数的本质,在今后的学习中尤其重要。
先引用表层意思:形参就是形式参数,函数定义的时候写的参数就叫形参,因为那时候它只是作为一个占位符而已。而实参就是你在真正调用这个函数的时候,传进去的数值。形参和实参的功能说白了就是用作数据传送。当发生函数调用时,实参的值会传送给形参,并且这种传输具有单向性(也就是不能把形参的值回传给实参)。另外,形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。(出自小甲鱼的《带你学C带你飞》系列课程)
因为形式参数只有在函数被调用的时候才会分配内存,调用结束后,立刻释放内存,所以形式参数的改变不会影响到实际参数。
这只是表层。如果对函数形式参数的理解认识只停留在这里的话,很多人就会像我一样在接下来学习递归的汉诺塔的时候就会非常难受,头都要裂开了也想不出这个操作是什么。
下面来剖析深层内容。
在定义变量时,为了好记,会把变量的值用一些特殊的方法标记上。比如在进行一元二次方程的求解的运算工具时,我们会定义公式b2 - 4*a*c”为Δ,在计算机里会写delta=...。这样不仅仅是给这个公式一个变量名,这个变量名也有意义。
同样的道理,在定义函数时,设置形参后,形参也存在了意义。形式参数是作为占位符定义在函数中。这个占位符所代表的意义就是程序编写者编写程序时为它赋予的意义。就像变量一样,形式参数存在,他就会有意义,形式参数如果没有意义,他就失去了存在的价值。形式参数及其所占之位包含的含义在定义函数之后永远不会改变。
说明这一点的好例子,就是递归中的汉诺塔。
汉诺塔问题,就是将大象放到冰箱里的问题。这三个步骤都包括同一个重复的步骤。在这里不做过多说明。
程序如下。
  1. # include <stdio.h>
  2. void hanoi(int n,char a,char b,char c);
  3. void hanoi(int n,char a,char b,char c)
  4. {
  5.         if (n!=1)
  6.         {
  7.                 hanoi(n-1,a,c,b);
  8.                 printf ("%c -> %c\n",a,c);
  9.                 hanoi(n-1,b,a,c);
  10.         }
  11.         else
  12.         {
  13.                 printf ("%c -> %c\n",a,c);
  14.         }
  15. }
  16. int main (void)
  17. {

  18.         hanoi(3,'a','b','c');
  19.         return 0;
  20. }
复制代码


大家很明显的看到,定义程序中,我让a所在的位置是起始柱,b所在的位置是中介柱,c所在的位置是目标柱。
大家现在思考如果我仍然定义void hanoi (n,a,b,c),但是我让a所在的位置是目标柱,b所在的位置是起始柱,c所在的位置是中介柱,那么程序应该怎么写?
同样的如果我让a所在的位置是目标柱,b所在的位置是中介柱,c所在的位置是起始柱,程序应该怎么写?
做出这些题目之前,一定要搞清楚,形参的意义,你定义的形参的意义是什么,这个意义在定义以后就不允许在改变了。
结尾很水,剩下的交给你们,回复答案即可查看正确答案。(有的人很调皮,直接回复“答案”二字,我。。。)

游客,如果您要查看本帖隐藏内容请回复
[/hide]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 23:51:37 | 显示全部楼层
答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-8 14:27:41 | 显示全部楼层
本帖最后由 沉默的人e 于 2020-1-8 14:30 编辑

。。。

看起来把学会的东西说明白是一门学问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表