C 函数参数

C 函数的形参和实参

在 C 语言中,函数的参数可以分为 2 种:形参和实参。其中函数在定义时的参数叫做 “形参”(形式上的参数),而函数在调用时的参数叫做 “实参”(实际上的参数)。

示例 1:C 形参和实参

#include <stdio.h>

int getSum(int a, int b)         // a 和 b 是形参
{
    return a + b;
}

int main(void)
{
    int sum = getSum(10, 20);    // 10 和 20 是实参
    printf("%d", sum);
    return 0;
}

运行结果如下。

30

分析:

从名字上就可以很容易区分,形参本质上是一个变量,实参本质上是一个数值。我们调用函数时,其实就是把实参作为值,然后赋值给形参。是不是感觉很熟悉?其实这个跟变量的赋值是一样的,非常的简单。

对于 getSum(10, 20) 来说,它其实就是将 10 赋值给 a,并且将 20 赋值给 b,相当于下面代码。

int a = 10;
int b = 20;

提示: 对于基本数据类型(如 int、float、char 等),C 语言采用的是 “值传递”(pass by value)的方式,也就是说,在函数调用时,实参的值会被复制一份传递给形参,函数内部对形参的修改不会影响到实参本身。

数组作为函数参数

之前我们接触的参数都是一些基本类型,比如 int、float 等。实际上在 C 语言中,数组也可以作为函数的参数。

示例 2:求数组最大值(函数实现)

#include <stdio.h>

// 定义函数
int getMax(int arr[], int length)
{
    int temp = arr[0];
    for (int i = 1; i < length; i++)
    {
        temp = temp > arr[i] ? temp : arr[i];
    }
    return temp;
}

int main(void)
{
    // 定义数组
    int arr[] = {36, 42, 33, 64, 97, 15, 84, 21, 75, 52};

    // 求数组长度          
    int length = sizeof(arr) / sizeof(arr[0]);                      
    // 调用函数
    printf("%d", getMax(arr, length));

    return 0;
}

运行结果如下。

97

分析:

在这个例子中,我们定义了一个 getMax() 函数用于求数组中的最大值。getMax() 有 2 个参数:一个是数组本身,另一个是数组长度。实现思路很简单,无非就是把数组和长度作为参数传进去处理,然后在函数内部遍历整个数组,然后求出最大值。

在函数定义中,当数组作为形参时,可以不指定数组的大小。但为了在函数内部正确地处理数组,通常需要将数组的大小作为另一个参数传递给函数,就像上面的 length 参数一样。

一般来说,如果想要在一个函数中对数组进行处理,我们一般都需要传入 2 个参数:数组和长度。这也是通用的做法,小伙伴们可以先简单记一下。

此外,在函数内部,传递进来的数组名 arr 会被当作一个指向数组第一个元素的指针来处理。因此,arr[i] 实际上是通过指针运算访问数组元素的。

提示: 与基本数据类型的值传递不同,当数组作为函数参数传递时,实际上是传递了数组的首地址(即指向数组第一个元素的指针)。这意味着函数内部对数组元素的修改会直接影响到原始数组。这种传递方式类似于 “地址传递”。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号