<stdarg.h>中va_start、va_arg和va_end的用法

本文详细介绍了C语言中用于处理可变参数列表的`va_arg`宏的使用方法,结合示例函数`sum`阐述了如何在函数内部获取并计算可变参数的值。注意`va_start`、`va_arg`和`va_end`的正确使用顺序,以及在调用`va_arg`时指定参数类型的重要性。通过示例程序展示了如何实现计算多个整数之和的功能。
摘要由CSDN通过智能技术生成

函数声明如下:

void va_start(va_list ap, last_arg);
type va_arg(va_list ap, type);
void va_end(va_list ap);

参数:

  • ap – 这是一个 va_list 类型的对象,它用来存储通过 va_arg 获取额外参数时所必需的信息。
  • last_arg – 最后一个传递给函数的已知的固定参数。
  • type – 这是一个类型名称。该类型名称是作为扩展自该宏的表达式的类型来使用的。

在变参数的函数中,va_arg负责返回函数的参数值,例程如下:

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

int sum(int, ...);

int main(void)
{
    printf("10、20、30、40和 50 的和 = %d\n", sum(5, 10, 20, 30, 40, 50));
    printf("15、25、35 和 45 的和 = %d\n", sum(4, 15, 25, 35, 45));

    return 0;
}

int sum(int num_args, ...)  //num_args为传入的参数数量
{
    int val = 0;
    va_list ap;  //定义一个va_list对象
    int i;

    va_start(ap, num_args);  //初始化的va_list对象
    for (i = 0; i < num_args; i++)
    {
        val += va_arg(ap, int);  //逐个获取参数,第二个参数是参数的数据类型
    }
    va_end(ap);  //关闭va_list对象

    return val;  //返回结果
}

程序运行结果:

注意事项:

  • va_start必须在使用va_argva_end之前被调用。
  • va_arg使用完成后必须通过va_end关闭va_list对象

欢迎小伙伴讨论,文章内容如有错误请在评论区评论或发私聊消息,谢谢你。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余府

谢谢你的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值