ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# C 编程中的按值函数调用 > 原文: [https://beginnersbook.com/2014/01/c-function-call-by-value-example/](https://beginnersbook.com/2014/01/c-function-call-by-value-example/) 按值调用函数是在 C 编程中调用函数的默认方式。在我们按值讨论函数调用之前,让我们理解在解释这个时我们将使用的术语: **实际参数:**函数调用中出现的参数。 **形式参数:**函数声明中出现的参数。 **例如:** ```c #include <stdio.h> int sum(int a, int b) { int c=a+b; return c; } int main( { int var1 =10; int var2 = 20; int var3 = sum(var1, var2); printf("%d", var3); return 0; } ``` 在上面的例子中,变量`a`和`b`是形式参数。变量`var1`和`var2`是实际参数。实际参数也可以是值。像`sum(10,20)`一样,这里 10 和 20 是实际参数。 在本指南中,我们将讨论**按值函数调用**。如果您想阅读按引用调用方法,请参考本指南:[按引用函数调用](https://beginnersbook.com/2014/01/c-function-call-by-reference-example/)。 让我们回到原点。 **什么是按值函数调用?** 当我们在调用函数的同时传递实际参数,这称为按值函数调用。在这种情况下,实际参数的值被复制到形式参数。因此,对形式参数执行的操作不反映在实际参数中。 ## 函数按值调用的示例 如上所述,在按值调用时,实际参数被复制到形式参数,因此函数对参数执行的任何操作都不会影响实际参数。让我们举个例子来理解这个: ```c #include <stdio.h> int increment(int var) { var = var+1; return var; } int main() { int num1=20; int num2 = increment(num1); printf("num1 value is: %d", num1); printf("\nnum2 value is: %d", num2); return 0; } ``` 输出: ```c num1 value is: 20 num2 value is: 21 ``` **说明** 我们在调用方法时传递变量`num1`,但由于我们使用按值调用方法调用函数,因此只将`num1`的值复制到形式参数`var`。因此,对`var`的更改不会反映在`num1`中。 ## 示例 2:使用按值函数调用交换数字 ```c #include <stdio.h> void swapnum( int var1, int var2 ) { int tempnum ; /*Copying var1 value into temporary variable */ tempnum = var1 ; /* Copying var2 value into var1*/ var1 = var2 ; /*Copying temporary variable value into var2 */ var2 = tempnum ; } int main( ) { int num1 = 35, num2 = 45 ; printf("Before swapping: %d, %d", num1, num2); /*calling swap function*/ swapnum(num1, num2); printf("\nAfter swapping: %d, %d", num1, num2); } ``` **输出:** ```c Before swapping: 35, 45 After swapping: 35, 45 ``` **为什么变量在交换后仍保持不变?** 原因相同 - 函数由`num1`和`num2`的值调用。实际上`var1`和`var2`实际上是交换的(不是`num1`和`num2`)。在按值调用时,实际参数只是复制到形式参数中。