沉默的人e 发表于 2020-1-7 23:24:11

重(chong)视,重(zhong)视形式参数

本帖最后由 沉默的人e 于 2020-1-7 23:43 编辑

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

      hanoi(3,'a','b','c');
      return 0;
}

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

人造人 发表于 2020-1-7 23:51:37

答案

{:10_257:}

沉默的人e 发表于 2020-1-8 14:27:41

本帖最后由 沉默的人e 于 2020-1-8 14:30 编辑

。。。

看起来把学会的东西说明白是一门学问。
页: [1]
查看完整版本: 重(chong)视,重(zhong)视形式参数