C基础知识(12):可变参数

Posted Storm_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C基础知识(12):可变参数相关的知识,希望对你有一定的参考价值。

该功能需要使用<stdarg.h>函数的最后一个参数写成省略号,即三个点号(...)省略号之前的那个参数是int,代表了要传递的可变参数的总数。该文件提供了实现可变参数功能的函数和宏。

具体步骤如下:

(1) 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。

(2) 在函数定义中创建一个va_list类型变量。

(3) 使用int参数和va_start宏来初始化va_list变量为一个参数列表。

(4) 使用va_arg宏和va_list变量来访问参数列表中的每个项。

(5) 使用宏va_end来清理赋予va_list变量的内存。

 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 
 4 double average(int num, ...);
 5 
 6 int main() {
 7     printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
 8 }
 9 
10 double average(int num, ...) {
11     va_list valist;
12     double sum = 0.0;
13     int i = 0;
14     // 为num个参数初始化valist
15     va_start(valist, num);
16     // 访问所有赋给valist的参数
17     for (i = 0; i < num; i++) {
18         sum += va_arg(valist, int);
19     }
20     // 清理为valist保留的内存
21     va_end(valist);
22     return sum / num;
23 }

 

以上是关于C基础知识(12):可变参数的主要内容,如果未能解决你的问题,请参考以下文章

C/C++可变参数模版和函数指针的结合

Chez Scheme 中的 FFI,用于具有可变参数 (varargs) 的 C 函数

具有不同编译器的 C++ 和可变参数

Swift 中的可变参数方法

C++11 中的非类型可变参数函数模板

C语言中如何实现可变参函数