📜  C-可变参数(1)

📅  最后修改于: 2023-12-03 14:59:52.539000             🧑  作者: Mango

C 可变参数

在 C 语言中,函数和参数数量必须是固定的。然而,在某些情况下,需要实现可变数量的参数。为了解决这个问题,C 语言引入了可变参数函数。

可变参数函数允许我们定义能够接受可变数量参数的函数。

stdarg.h

为了实现可变参数函数,我们需要使用头文件 stdarg.h。该文件中包含了许多有用的宏和函数,比如 va_listva_startva_argva_end

va_list

va_list 是一个指向参数列表的指针。

typedef char* va_list;
va_start

va_start 宏用于初始化 va_list 指针。

void va_start(va_list ap, last_arg)
  • ap:指向参数列表的指针。
  • last_arg:是我们传递给可变参数函数的最后一个具体参数的名称。
va_arg

va_arg 宏获取下一个可变参数,并将指针向后移动。我们需要传递一个 va_list 指针和一个参数类型。

type va_arg(va_list ap, type);
  • ap:指向参数列表的指针。
  • type:可变参数的数据类型。
va_end

va_end 宏用于清理 va_list 指针,以便在函数调用结束后再次使用。

void va_end(va_list ap);
  • ap:指向参数列表的指针。
实例

下面是一个实现可变参数函数的函数示例:

#include <stdio.h>
#include <stdarg.h>

void sum(int count, ...)
{
    int sum = 0;

    va_list args;
    va_start(args, count);

    for (int i = 0; i < count; i++) {
        sum += va_arg(args, int);
    }

    va_end(args);

    printf("sum = %d", sum);
}

int main()
{
    sum(3, 1, 2, 3); // sum = 6

    return 0;
}
总结

可变参数函数是 C 语言非常有用的特性之一。它允许我们定义实现函数时可传递不同数量、不同类型参数的函数。