C语言函数



C语言中的函数是一块组织良好的可重用代码块,它执行单个相关的操作。每个C程序至少有一个函数,即main(),即使是最简单的程序也可以定义附加函数。

当某个问题的算法涉及冗长而复杂的逻辑时,它会被分解成更小、独立且可重用的块。这些小的代码块在不同的编程语言中被称为不同的名称,例如模块子程序函数方法

您可以将代码分成单独的函数。如何将代码划分到不同的函数中取决于您,但逻辑上划分是使每个函数执行特定任务。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供函数的实际主体。

C标准库提供了许多内置函数,您的程序可以调用这些函数。例如,strcat()用于连接两个字符串,memcpy()用于将一个内存位置复制到另一个位置,以及许多其他函数。

C语言中的模块化编程

函数旨在执行作为整个过程一部分的特定任务。这种软件开发方法称为模块化编程

模块化编程采用自顶向下的软件开发方法。编程解决方案有一个主例程,通过它调用更小的独立模块(函数)。

每个函数都是一个独立的、完整的、可重用的软件组件。当被调用时,函数执行指定的任务并将控制权返回给调用例程,可以选择性地连同其过程的结果一起返回。

这种方法的主要优点是代码变得易于理解、开发和维护。

C语言中的库函数

C语言提供许多包含在不同头文件中的库函数。例如,stdio.h头文件包含printf()和scanf()函数。类似地,math.h头文件包含许多函数,例如sin()、pow()、sqrt()等等。

这些函数执行预定义的任务,可以根据需要在任何程序中调用。但是,如果您找不到合适的库函数来满足您的目的,您可以自己定义一个。

在C语言中定义函数

在C语言中,有必要提供任何函数原型的向前声明。库函数的原型存在于相应的头文件中。

对于用户定义的函数,其原型存在于当前程序中。函数的定义及其原型声明应该匹配。

执行函数中的所有语句后,程序的流程返回到调用环境。函数可能随流程控制一起返回一些数据。

C语言中的函数声明

函数声明告诉编译器函数名称以及如何调用函数。函数的实际主体可以单独定义。

函数声明包含以下部分:

return_type function_name(parameter list);

对于上面定义的函数max(),函数声明如下:

int max(int num1, int num2);

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

int max(int, int);

当您在一个源文件中定义一个函数并在另一个文件中调用该函数时,需要函数声明。在这种情况下,您应该在调用该函数的文件顶部声明该函数。

C语言中函数的组成部分

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

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

C编程中的函数定义由函数头函数体组成。以下是函数的所有部分:

  • 返回类型 - 函数可以返回值。return_type是函数返回值的数据类型。有些函数执行所需的操作而不返回值。在这种情况下,return_type是关键字void。
  • 函数名称 - 这是函数的实际名称。函数名称和参数列表一起构成函数签名。
  • 参数列表 - 参数(也称为参数)就像一个占位符。当调用函数时,您将值作为参数传递。此值称为实际参数或参数。参数列表是指函数的参数的类型、顺序和数量。参数是可选的;也就是说,函数可能不包含参数。
  • 函数体 - 函数体包含定义函数作用的一组语句。

C语言中的函数应该有返回类型。函数返回的变量的类型必须是函数的返回类型。在上图中,add()函数返回int类型。

示例:C语言中的用户自定义函数

在这个程序中,我们使用了名为max()的用户自定义函数。此函数接受两个参数num1num2,并返回两者之间的最大值:

#include <stdio.h>

/* function returning the max between two numbers */
int max(int num1, int num2){

   /* local variable declaration */
   int result;
   
   if(num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

int main(){
   printf("Comparing two numbers using max() function: \n");
   printf("Which of the two, 75 or 57, is greater than the other? \n");
   printf("The answer is: %d", max(75, 57));
    
   return 0;
}

输出

运行此代码时,将产生以下输出:

Comparing two numbers using max() function: 
Which of the two, 75 or 57, is greater than the other? 
The answer is: 75

在C语言中调用函数

在创建C函数时,您会定义函数必须执行的操作。要使用函数,您必须调用该函数以执行已定义的任务。

要正确调用函数,您需要遵守函数原型的声明。如果函数被定义为接收一组参数,则必须传递相同数量和类型的参数。

当函数定义包含参数时,函数名前面的参数称为**形式参数**。当调用函数时,传递给它的参数是**实际参数**。

当程序调用函数时,程序控制权将转移到被调用的函数。被调用的函数执行定义的任务,当执行其返回语句或到达其函数结束的闭合大括号时,它将程序控制权返回给主程序。

示例:调用函数

要调用函数,只需将所需的参数与函数名一起传递即可。如果函数返回一个值,则可以存储返回的值。请看下面的例子:

#include <stdio.h>
 
/* function declaration */
int max(int num1, int num2);
 
int main (){

   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;
 
   /* calling a function to get max value */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* function returning the max between two numbers */
int max(int num1, int num2){

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

输出

我们将max()与main()一起保留,并编译了源代码。运行最终的可执行文件时,将产生以下结果:

Max value is : 200

C语言中的main()函数

C程序是由一个或多个函数组成的集合,但其中一个函数必须命名为**main()**,它是程序执行的入口点。

从main()函数内部,可以调用其他函数。main()函数可以调用库函数,例如printf(),其原型是从头文件(stdio.h)或代码中存在的任何其他用户定义的函数中获取的。

在C语言中,程序的定义顺序无关紧要。在一个程序中,无论main()是第一个函数还是其他位置,它都是入口点。

**注意:**在C语言中,任何函数都可以调用任何其他函数,并且可以调用任意次数。函数也可以调用自身。这种自调用的函数称为**递归函数**。

函数参数

如果函数要使用参数,它必须声明接受参数值的变量。这些变量称为函数的**形式参数**。

形式参数在函数内部的行为类似于其他局部变量,在进入函数时创建,在退出函数时销毁。

调用函数时,参数传递给函数有两种方式:

序号 调用类型和描述
1 值传递

此方法将参数的实际值复制到函数的形式参数中。在这种情况下,对函数内部参数所做的更改不会影响参数本身。

2 引用传递

此方法将参数的地址复制到形式参数中。在函数内部,该地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响参数本身。

默认情况下,C语言使用**值传递**来传递参数。一般来说,这意味着函数内的代码无法更改用于调用函数的参数。

广告