vlambda博客
学习文章列表

C语言核心技术——函数

对于一个C程序而言,它所有的命令都包含在函数内。每个函数都会执行特定的任务。有一个特别的函数,名称为main()——该函数是程序启动后,第一个执行的函数。其他所有函数都是main()函数的子函数(或者与之相关联的过程,例如回调函数),并且它们的函数名称可以自己设定。每个函数都只能被定义一次。但一个函数可以根据需要被多次的声明和调用。

函数的定义

C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{
  body of the function
}

函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不要返回值,在这种情况下,return_type 是关键字 void

  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。

  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

  • 函数主体:函数主体包含一组定义函数执行任务的语句。

下来看个示例:

int add(int a, int b){
   int result;
   rusult = a + b;
   return result;
}

C语言核心技术——函数

{}之间的内容则为函数体。

函数的声明和调用

在使用函数之前应该先声明,事先通知编译器该函数的类型:换句话说,一个声明即是描述一个函数的接口。声明至少应指明函数返回值的类型,如下例所示:

int add(int a, int b);

在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:

int max(int, int);

创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。

接下来我们再看一个示例:

#include <stdio.h>

/* 函数声明 */
int max(int num1, int num2);

int main()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;

   /* 调用函数来获取最大值 */
   ret = max(a, b);

   printf("Max value is : %d\n", ret);

   return 0;
}

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{
   /* 局部变量声明 */
   int result;

   if (num1 > num2)
       result = num1;
   else
       result = num2;

   return result;
}

运行结果如下:

C语言核心技术——函数

函数调用这一块我想着重说下递归调用

所谓递归,就是自己调用自己。C语言中函数可以直接或间接的调用自己,所谓的间接调用,是指在递归函数调用的下层函数中再调用自己,递归关系如下图:

  • 直接调用

C语言核心技术——函数

  • 间接调用

C语言核心技术——函数

语法格式如下:

void recursion()
{
  statements;
  ... ... ...
  recursion(); /* 函数调用自身 */
  ... ... ...
}

int main()
{
  recursion();
}

流程图:

C语言核心技术——函数

下来我们一起看一个关于函数递归调用的示例

//下面的实例使用递归函数生成一个给定的数的斐波那契数列:
#include <stdio.h>

int fibonaci(int i)
{
  if(i == 0)
  {
     return 0;
  }
  if(i == 1)
  {
     return 1;
  }
  return fibonaci(i-1) + fibonaci(i-2);
}

int  main()
{
   int i;
   for (i = 0; i < 10; i++)
  {
      printf("%d\t\n", fibonaci(i));
  }
   return 0;
}

函数运行结果:

C语言核心技术——函数