# 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`）。在按值调用时，实际参数只是复制到形式参数中。