宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、函数的概念

函数是将一组语句放在一起执行一个特定任务的单元。C语言编程的所有程序都是由一个或多个函数组成的。函数是C语言程序中的基本模块,程序是通过调用函数来执行各种操作的。

在C语言中,一个函数由函数头和函数体组成。函数头的形式如下:

返回类型 函数名 (参数列表)

返回类型指定函数的返回值类型,由C语言数据类型中的任何一种取值。函数名是唯一标识函数的符号,用于调用函数。参数列表是传递给函数的参数列表,也就是函数要处理的数据。

二、函数的定义

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

返回类型 函数名 (参数列表)
{
     函数体
}

函数名由一个标识符组成,用于标识该函数。参数列表是由零个或多个参数组成的,每个参数是由其类型和名字组成的。函数体由一组语句组成,这些语句描述了函数执行的操作。

下面是一个简单的函数示例:

#include 
 
void print_message(void);
 
int main()
{
    print_message();   // 调用函数
    return 0;
}
 
// 函数定义
void print_message(void)
{
    printf("Hello Worldn");
}

在上面的示例中,print_message()是函数名,该函数没有任何参数和返回值。函数被调用时,它会打印“Hello World”这个字符串。

三、函数的参数传递

C语言中函数可以使用参数传递数据。C语言中有两种参数传递方式:值传递和引用传递。

值传递是指传递参数的值,函数对参数进行操作不影响原始数据。下面是一个值传递的示例:

#include 
 
void swap(int x, int y);
 
int main()
{
   int a = 100;
   int b = 200;

   printf("交换前 a 的值:%dn", a );
   printf("交换前 b 的值:%dn", b );

   /* 调用函数来交换值 */
   swap(a, b);

   printf("交换后 a 的值:%dn", a );
   printf("交换后 b 的值:%dn", b );

   return 0;
}

void swap(int x, int y)
{
   int temp;

   temp = x; /* 保存 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把原来的 x 值赋值给 y */

   return;
}

在上面的示例中,swap函数中的变量x和y与main函数中的a和b不是同一个变量。函数执行时,swap函数中的变量只是main函数中变量值的副本。swap函数中对x和y的操作不影响main函数中的a和b。

引用传递是指传递指针,函数可以通过指针修改原始数据。下面是一个引用传递的示例:

#include 

/* 函数声明 */
void swap(int *x, int *y);

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

   printf("交换前,a 的值:%dn", a );
   printf("交换前,b 的值:%dn", b );

   /* 调用函数来交换值 */
   swap(&a, &b);

   printf("交换后,a 的值:%dn", a );
   printf("交换后,b 的值:%dn", b );

   return 0;
}

void swap(int *x, int *y)
{
   int temp;

   temp = *x;    /* 保存地址 x 的值 */
   *x = *y;      /* 把 y 赋值给 x */
   *y = temp;    /* 把 x 赋值给 y */

   return;
}

在上面的示例中,swap函数中的x和y是指向main函数中a和b的指针。函数中对指针的操作可以影响main函数中的a和b。

四、函数的返回值

函数可以有一个返回值,返回值的类型必须与函数声明的返回类型相同。下面是一个返回值的示例:

#include 

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

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

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

   printf( "最大值是:%dn", ret );

   return 0;
}

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

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

   return result; 
}

在上面的示例中,max函数返回的是num1和num2中的最大值。main函数获取到返回值后,使用printf函数输出了返回值。

五、函数的递归

递归是指一个函数可以调用自身的行为。递归函数包含两个基本部分:递归调用和递归返回条件。下面是一个递归的示例:

#include 

/* 函数声明 */
unsigned long long fib(int n);

int main()
{
    int n = 9;
    printf("%d项斐波那契数列的值为:%lldn", n, fib(n));
    return 0;
}

/* 斐波那契数列的递归函数 */
unsigned long long fib(int n)
{
    if (n == 0 || n == 1)
        return n;
    else
        return fib(n - 1) + fib(n - 2);
}

上面的示例是斐波那契数列的递归函数。该函数可以计算第n项斐波那契数列的值。在函数中,当n为0或1时,递归结束。否则,递归调用函数本身计算n-1和n-2项斐波那契数列的值。