C 语言中的函数


2022年8月31日, 学习电子教程
2429

在本教程中,您将通过简单易懂的示例,学习关于 C 语言函数的所有知识。本教程将指导您如何定义函数以及调用函数的各种方法。

函数是 C 语言编程的基础和重要组成部分。对于大型程序,代码的编写和管理会变得复杂。此外,我们经常需要重复执行类似的任务,这些任务使用一套通用的指令。为了解决这个问题,引入了函数的概念。 

在 C 语言中使用函数的好处

由于以下几个合理的原因,函数在所有编程语言中都扮演着至关重要的角色:
A.     函数增强了代码的可读性。
B.    代码的可重用性是 C 语言中函数的重要成就。
C.    通过避免在多处重写相同的代码,减少了代码的冗余。
D.    函数使得调试变得容易,因为模块化使得错误更容易追踪。
E.    由于函数调用取代了重复的代码块,代码的规模和复杂性得以降低。 

函数类型

函数基本上有两种类型:

  1. 标准库函数
  2. 用户定义函数

标准库函数指的是编译器预先编写好的一组代码,用于执行特定任务。这些是已经定义在头文件中的内置函数。例如,用于存储输入数据的scanf和用于显示内容的printf都是定义在头文件stdio.h中的标准库函数。通常,所有的输入输出操作,包括数学运算,都是由库函数实现的。而用户定义函数则是由程序员编写,并在程序执行过程中根据需要使用。

函数的重要方面 

只有正确指定了以下三个重要方面,C 程序中的函数才算完整。它们是:

  • 函数声明
  • 函数定义
  • 函数调用

如何在 C 语言中声明函数

在 C 语言中,函数声明始终是一种更好的做法,因为它会向编译器提示程序稍后将使用一个函数。函数声明向编译器提供函数名称、函数使用的参数数量以及函数类型等信息。声明函数时需要考虑的一个重点是,它必须在全局范围内声明,也就是在 main() 函数之外。

函数声明可以被看作是向编译器发出的一个公告,即将来程序中会使用一个函数。因此,它没有函数体。

函数声明的语法是:

return_type function_name ( data_type parameter(s));

如何在 C 语言中定义函数

下面给出了 C 语言中函数定义的基本语法。


return_type function_name ( data_type arg(s))
{
    //function body with C statements
}

上述函数定义的各个组成部分如下表所示。

组成部分 描述
return_type 定义要返回的值的数据类型(int、float、char)。可选。
 function_name  应该是一个有效的标识符。(参考标识符规则
Parameter(s) 用于向函数传递输入值。可选。
function _body> 用大括号 {} 括起来的一组有效的 C 语句。

函数定义示例

您必须在任何函数的函数体内编写代码来定义它。假设我们想创建一个简单的函数 'show',它的任务是打印 'hello'。在这种情况下,您可以自由地在程序中的任何位置定义 'show' 函数,如下所示:

void show()
{
       printf("hello");
}

对于处理变量的函数,定义如下:

float area(int r)
{
   pi=3.14;
   a = pi*r*r;
   return(a);
}

在这个例子中,我们定义了一个计算圆面积的函数。这个函数只是一个脚本,在没有函数调用的情况下不会执行。因此,它被称为函数定义。

如何在 C 语言中调用函数

与函数定义一样,函数调用是函数的另一个重要方面。在正确定义函数之后,我们需要调用它来完成其设计的工作。为此,我们只需写下函数名和 (),后跟一个分号。语法如下:

function_name(arg(s));

函数调用的多种方式

在 C 语言中,我们可以通过四种不同的方式进行函数调用,下面列出了这些方式及其简单示例。

  1. 无参数无返回值的函数
  2. 有参数无返回值的函数
  3. 无参数但有返回值的函数
  4. 既有参数又有返回值的函数

观察下面的示例,了解如何通过这四种不同的方式计算圆的面积。

示例 1:无参数且无返回值的函数。

#include<stdio.h>

void area() {
    float a, pi;
    int r = 10;
    pi = 3.14;
    a = pi * r * r;
    printf("Area of Circle is : %f\n", a);
}

int main() {
    area();
}

输出

Area of Circle is : 314.000000

观察以上程序,您可以发现以下几点:

  • 提供的返回类型是 void,这是一个空数据类型
  • 函数定义中没有提及 return 语句
  • 函数调用中没有指定参数

示例 2:无参数但有返回值的函数

#include<stdio.h>

float area() {
    float a, pi;
    int r = 10;
    pi = 3.14;
    a = pi * r * r;
    return (a);
}

int main() {
    printf("Area of Circle is : %f\n", area());
}

输出

Area of Circle is : 314.000000

在这个程序中,您可以发现以下几点:

  • 提供的返回类型是 float
  • 函数定义中提到了一个 return 语句,用于将值返回给函数调用。
  • 函数调用中没有指定参数

示例 3:有参数但无返回值的函数。

#include<stdio.h>

area(int r) {
    float a, pi;
    pi = 3.14;
    a = pi * r * r;
    printf("Area of Circle is : %f\n", a);
}

int main() {

    area(10);
}

输出

Area of Circle is : 314.000000

在这个程序中,您可以发现与前一个程序的以下不同之处:

  • 未指定返回类型
  • 函数定义中没有提到 return 语句
  • 函数调用中指定了参数 10

示例 4:既有参数又有返回值的函数。

#include<stdio.h>

float area() {
    float a, pi;
    int r = 10;
    pi = 3.14;
    a = pi * r * r;
    return (a);
}

int main() {
    float arc;
    arc = area();
    printf("Area of Circle is : %f\n", arc);
}

输出

Area of Circle is : 314.000000

在上面的代码片段中,您可以发现以下几点:

  • 提供的返回类型是 float
  • 函数定义中提到了一个 return 语句,用于将值返回给函数调用。
  • 在函数调用中指定了参数。

函数在 C 语言中的工作原理

让我们来学习函数的整体工作原理和执行顺序。

How function works in c

函数在 C 语言中的工作原理

在 C 语言中,程序的执行从 main() 函数开始,函数调用就位于其中。当编译器遇到一个函数调用时,控制权将转移到相应的函数定义处,执行为其设计的任务。当遇到 return 语句时,最终结果将返回到函数调用处。如果没有 return 语句,它会在函数内部输出结果,然后立即终止函数,将控制权交还给 main() 函数。

C 语言中的 return 语句

C 语言中的 return 语句通过终止其对应函数的执行,将一个值返回给调用函数。要返回值,我们必须用任何有效的数据类型声明函数,否则可以将其声明为 void。在我们之前的例子中,**a** 的值被返回到 main 函数并赋给变量 **arc**,如下图所示。

retrun statement in c

C 语言中的 return 语句