C++函数可变参数实现

原创 2013年07月08日 16:23:03

#include <iostream>
#include <cstdarg>

int add(const int a,...); //函数原型

int main()
{
	using std::cout;
	using std::endl;

	cout << "\t可变参数函数功能验证程序\n"<< endl;
	cout << "五个实参调用add求和:"<< add(5,1,2,3,4,5)<< endl;
	cout << "九个实参调用add求和:"<< add(9,1,2,3,4,5,6,7,8,9)<< endl;
}
//可变参数函数,形参列表中的省略号(也就是三个英文句点:...)表明可以传递任意数量的实参
int add(const int ca,...) //第一个参数指定了参数列表中实参的个数
{
	if (ca <= 0) //判断参数列表中参数的数量
		return 0;

	int sum = 0;
	va_list pArg; //声明一个va_list类型的参数列表指针,它可以依次指向各个实参
	va_start(pArg,ca);//va_start初始化pArg,设定它指向第一个实参,ca辅助pArg确定第一个实参的位置


	for (int i=0; i<ca; i++)//使用for循环取出实参列表中的每一个值
	{
		sum = sum + va_arg(pArg,int);//va_arg返回pArg指向的实参的值,然后使pArg自增,指向下一个实参,int是实参的类型
	} //va_arg的第二个参数int还能影响pArg的自增,如果它配置的不正确,将会出现错误的结果


	va_end(pArg); //重置参数列表指针为空

	return sum;
}

相关文章推荐

C/C++中用va_start/va_arg/va_end实现可变参数函数的原理与实例详解

在C/C++中,我们经常会用到可变参数的函数(比如printf/snprintf等),本篇笔记旨讲解通过va_start/va_arg/va_end这簇宏来实现可变参数函数的原理,并在文末给出简单的实...
  • slvher
  • slvher
  • 2013年08月10日 17:51
  • 4949

C/C++中用va_start/va_arg/va_end实现可变参数函数的原理与实例详解 .

原文链接:http://blog.csdn.net/slvher/article/details/9881171   在C/C++中,我们经常会用到可变参数的函数(比如printf/snprintf等...

C/C++(6)va_list、va_start、va_arg、va_end实现可变参数列表函数

经典的可变参数表printf函数的实现原理:在C/C++中,对函数参数的扫描是从后向前的。 函数参数是通过压入堆栈的方式来给函数传参数的,最先压入的参数最后出来,而栈是从内存的高地址向低地址存放的,...
  • qjpxAAA
  • qjpxAAA
  • 2016年10月24日 17:40
  • 291

C++函数可变参数实现原理探究——以实现printf为例

当我们构建函数时,如果我们希望得到的是不定的参数,那我们应该怎么办呢?下面几个关键的macro上场: #define _ADDRESSOF(v) (&reinterpret_cast(v)) type...

C语言可变参数及printf函数的实现

  • 2012年04月15日 16:53
  • 129KB
  • 下载

C/C++函数参数的入栈顺序,计算顺序和可变参数的实现

函数参数入栈顺序,参数计算顺序以及可变参数的实现

[C/C++]函数参数的入栈顺序与可变参数的实现

转载地址:http://blog.sina.com.cn/s/blog_54f82cc2010133mn.html #include void foo(int x, int y, int z) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++函数可变参数实现
举报原因:
原因补充:

(最多只允许输入30个字)