可变参数:stdarg.h

作者:追风剑情 发布于:2020-3-23 17:27 分类:C

变参函数比使用变参宏更复杂,但是函数的应用范围更广。

示例:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

double sum(int, ...);

int main(int argc, char* argv[])
{
	double s, t;

	s = sum(3, 1.1, 2.5, 13.3);
	t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
	printf("return value for "
		"sum(3, 1.1, 2.5, 13.3):		%g\n", s);
	printf("return value for "
		"sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): %g\n", t);

	system("pause");
	return 0;
}

double sum(int lim, ...)
{
	va_list ap; // 声明一个对象储存参数
	//va_list apcopy;
	double tot = 0;
	int i;

	va_start(ap, lim); // 把ap初始化为参数列表
	//va_arg()不提供退回之前参数的方法,所以有必要保存va_list类型变量的副本
	//va_copy(apcopy, ap);
	for (i = 0; i < lim; i++)
	{
		tot += va_arg(ap, double); // 访问参数列表中的每一项
	}
	va_end(ap); // 清理工作
	//调用了va_end(ap)后,只有用va_start(ap, lim)重新初始化ap后,才能使用变量ap

	return tot;
}

运行测试

111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号