美文网首页首页投稿(暂停使用,暂停投稿)程序员每周500字
C语言的函数(第二篇章:函数的传值与传址和函数的调用)

C语言的函数(第二篇章:函数的传值与传址和函数的调用)

作者: 遮天的龙 | 来源:发表于2016-05-24 23:24 被阅读401次

    一、函数的传值与传址

    说起函数的传值与传址,外表看起来很高大上的样子,其实本质是都是传递一个数值而己。

    • 在这里引入两个概念,就是函数的的两类参数。分别为:形式参数(形参)和实际参数(实参)。函数定义时的参数称为形参,函数调用时使用的参数称为实参。(第二点讲函数的调用也会用到这两个概念的。)

    • eg:使用函数交换两个变量的值。(这里给个例子吧。详细的会在注释标出。)

      #include <stdio.h>
      int main(void)
      {
      int a = 4; int b = 5;  
      printf("a = %d b = %d\n",a,b); //定义两个变量
      int t = a;                                //swap的传值
      a = b;                                    //进行了有参交换
      b = t;                                    //对swap功能进行打包
      printf("a = %d b = %d\n",a,b);
      return 0;
      

      }

    二、函数的调用

    函数调用的一般形式有两种:

    • 1函数语句 :
      函数名 (实参表列); 或 函数名();[不要求函数带返回值]
      eg:swap(x,y);

    • 2函数表达式:
      m=max(a,b);

    • 3函数的嵌套调用:
      虽然现在的IDE(集成开放环境)平台有的允许嵌套定义的,但函数不能嵌套定义,为了考虑兼容的问题,一般都不建议去嵌套定义的。
      C语言允许进行嵌套调用。eg:
      #include<stdio.h>
      fun2(int x,int y)
      {
      int z;
      z=2*x-y;
      return z;
      }
      fun1(int x,int y)
      {
      int z;
      z=fun2(x,x+y); //在fun1()内调用fun2()函数
      return z;
      }
      main()
      {
      int a,b,c;
      printf("Please input two number:");
      scanf("%d%d",&a,&b);
      c=fun1(a,b); ///调用fun1()函数
      printf("%d\n",c);
      }

    • 4函数的递归调用
      定义:在调用一个函数的过程中,又直接或者间接地调用了该函数本身,这种形式称为函数的递归调用,这个函数就称为递归函数。
      其实就是一句话:自身调用自身
      一般的形式为:
      递归返回func(满足递归的条件)
      {
      if(能使递归终止条件)
      终止处理;
      else
      func(趋于递归终结的条件);
      }
      举个例子:用递归方法求n!(n>0)。
      include<stdio.h>
      long func(int n) //定义求阶乘的函数 func()
      {
      long m;
      if(n==1)
      m=1;
      else
      m= func(n-1)* n; //在函数的定义中又调用了自己
      return m;
      }
      main()
      {
      int n; float y;
      printf("input the value of n.\n");
      scanf("%d",&n);
      printf("%d!=%ld\n",n, func(n)); /输出n!
      }

    相关文章

      网友评论

        本文标题:C语言的函数(第二篇章:函数的传值与传址和函数的调用)

        本文链接:https://www.haomeiwen.com/subject/shozrttx.html