可变参数列表

1. 前言

通过stdarg.h头文件中的方法可以实现函数的可变参数列表,实现如printf、scanf函数类似的参数传递功能

#include <stdarg.h>
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);

2. 方法介绍

  • va_list
    相关方法中,都需要使用到va_list类型参数,va_list类型的变量是指向参数列表的指针
  • va_start
    va_start方法,第一个参数是指向参数列表的指针,第二个参数是参数列表中最后一个可以确定类型的参数名,通过这两个参数可以确定可变参数的起始地址
  • va_arg
    第一个参数va_list类型,得到可变参数的地址,第二个参数是可变参数的类型,结合两个参数返回可变参数的值
  • va_end
    把va_list变量置为空指针

3. 具体实现

  • printf如何声明
    int printf(const char *format, ...);,其中format即使用时""中包括的字符串数据,其中的%占位符可以标识其后可变参数
  • 自实现可变个数个int值相加
#include <stdarg.h>
#include <stdio.h>

int add(int n, ...) {
  va_list ap;
  va_start(ap, n);
  
  int res = 0;

  int ii = 0;
  for (ii = 0; ii < n; ii++) {
    res += va_arg(ap, int);
  }

  return res;
}

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

  printf ("%d", add(3, a, b, c));

  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值