ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# C 编程中的函数 > 原文: [https://beginnersbook.com/2014/01/c-functions-examples/](https://beginnersbook.com/2014/01/c-functions-examples/) 函数是执行特定任务的语句块。假设您正在使用 C 语言构建应用,并且在某个程序中,您需要多次执行相同的任务。在这种情况下,您有两种选择: a)每次要执行任务时都使用相同的语句集 b)创建一个执行该任务的函数,并在每次需要执行该任务时调用它。 使用选项(b)是一种很好的做法,优秀的程序员总是在用 C 编写代码时使用函数。 ### 函数类型 1)**预定义的标准库函数** - 如`puts()`,`gets()`,`printf()`,`scanf()`等 - 这些函数已经在头文件中有定义(`.h`文件如`stdio.h`),所以我们只要在需要使用它们时调用它们。 2)**用户定义函数** - 我们在程序中创建的函数称为用户定义函数。 在本指南中,我们将学习如何创建用户定义的函数以及如何在 C 编程中使用它们。 ## 为什么我们需要 C 中的函数 由于以下原因使用函数: a)提高代码的可读性。 b)提高代码的可重用性,可以在任何程序中使用相同的函数,而不是从头开始编写相同的代码。 c)如果使用函数,代码的调试会更容易,因为错误很容易被跟踪。 d)减少代码的大小,重复的语句集被函数调用替换。 ### 函数的语法 ```c return_type function_name (argument list) { Set of statements – Block of code } ``` **`return_type`**:返回类型可以是任何数据类型,如`int`,`double`,`char`,`void`,`short`等。一旦你完成下面的例子,不要担心你会更好地理解这些术语。 **`function_name`**:它可以是任何东西,但建议为函数设置一个有意义的名称,这样只要看到它的名字就可以很容易地理解函数的用途。 **参数列表**:参数列表包含变量名称及其数据类型。这些参数是函数的一种输入。例如 - 用于相加两个整数变量的函数将具有两个整数参数。 **代码块**:C 语句集,只要对函数进行调用,就会执行。 **您觉得上述术语令人困惑吗? - 不要担心,在你学会了所有这些之前我不会结束本指南 :)** 让我们举一个例子 - 假设你想创建一个函数来相加两个整数变量。 **让我们分解问题,以便它易于理解:** 函数将添加两个数字,因此它应该有一些有意义的名称,如`sum`,`addition`等。例如,让我们为这个函数取名。 ```c return_type addition(argument list) ``` 这个函数相加了两个整数变量,这意味着我需要两个整数变量作为输入,让我们在函数签名中提供两个整数参数。函数签名是: ```c return_type addition(int num1, int num2) ``` 两个整数之和的结果仅为整数。因此函数应该返回一个整数值 - **我得到了我的返回类型** - 它将是整数: ```c int addition(int num1, int num2); ``` 所以你得到了你的函数原型或签名。现在你可以在 C 程序中实现这样的逻辑: ### 如何在 C 中调用函数? 考虑以下 C 程序: #### 示例 1:创建用户定义的函数`addition()` ```c #include <stdio.h> int addition(int num1, int num2) { int sum; /* Arguments are used here*/ sum = num1+num2; /* Function return type is integer so we are returning * an integer value, the sum of the passed numbers. */ return sum; } int main() { int var1, var2; printf("Enter number 1: "); scanf("%d",&var1); printf("Enter number 2: "); scanf("%d",&var2); /* Calling the function here, the function return type * is integer so we need an integer variable to hold the * returned value of this function. */ int res = addition(var1, var2); printf ("输出: %d", res); return 0; } ``` 输出: ```c Enter number 1: 100 Enter number 2: 120 输出: 220 ``` #### 示例 2:创建一个不返回任何内容的`void`用户定义函数 ```c #include <stdio.h> /* function return type is void and it doesn't have parameters*/ void introduction() { printf("Hi\n"); printf("My name is Chaitanya\n"); printf("How are you?"); /* There is no return statement inside this function, since its * return type is void */ } int main() { /*calling function*/ introduction(); return 0; } ``` 输出: ```c Hi My name is Chaitanya How are you? ``` **有关 C 中函数的注意事项:** 1)C 程序中的`main()`也是一个函数。 2)每个 C 程序必须至少有一个函数,即`main()`。 3)函数数量没有限制; C 程序可以具有任意数量的函数。 4)一个函数可以调用自身,它被称为“**递归**”。我已经为它写了一份单独的指南。 **C 函数必须记住的术语** **返回类型**:返回值的数据类型。它也可以是`void`的,在这种情况下,函数不返回任何值。 注意:例如,如果函数返回类型是 **`char`**,那么函数应该返回`char`类型的值,并且在调用此函数时`main()`函数应该有一个`char`数据类型的变量来存储返回的值。 结构看起来像: ```c char abc(char ch1, char ch2) { char ch3; … … return ch3; } int main() { … char c1 = abc('a', 'x'); … } ``` #### 关于 C 中函数的更多主题 1) [**函数 - 按值调用方法**](https://beginnersbook.com/2014/01/c-function-call-by-value-example/) - 在按值调用方法中,实际参数被复制到形式参数,因此函数对形式参数执行的任何操作都不会影响实际参数。 2) [**函数 - 按引用调用方法**](https://beginnersbook.com/2014/01/c-function-call-by-reference-example/) - 与按值调用不同,在此方法中,实际参数的地址被传递给形式参数,这意味着对形式参数执行的任何操作会影响实际参数的值。