可变参函数va_list, va_start, va_arg 和 va_end

1、通过例子说明 va_list 的用法

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <stdarg.h>

int f(int x, int y, int z)
{
    return x + y + z;
}

int sum(int size, ...)
{
    va_list vp;
    int s = 0;
    int i = 0;
   
    va_start(vp, size);
    for (i = 0; i < size; ++ i) {
        s += va_arg(vp, int);
    }
    va_end(vp);

    printf("%d,%d\n", size, s);
}

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;

    printf("%d\n", f(a, b , c));
    sum(5, 20, 30, 40, 50, 20);
    return 0;
}

输出如下:

[xuanmiao@localhost Demo]$ gcc va_list.c -o va_list
[xuanmiao@localhost Demo]$ ./va_list 
6
5,160

说明:

va_list vp  声明一个va_list类型的指针变量 vp,指向参数列表;

va_start(vp,size) 使参数列表指针vp指向函数参数列表中的第一个可选参数;

va_arg(vp,int):返回参数列表中指针vp所指的参数,返回类型为int,并使指针vp指向下一个参数。

va_end(vp): 清空参数列表,并置参数指针vp无效。

 

参考博客:

可变参数va_list的理解和使用-gongping11-ChinaUnix博客

c语言之va_list详解 - 君の内存 (adtxl.com)

posted on 2024-01-25 23:50  轩邈、  阅读(64)  评论(0编辑  收藏  举报

导航