《C和指针》笔记(六)-- 可变参数列表

C/C++ 笔记

QQ : 1841545843
邮箱 : [email protected]

可变参数列表是通过宏来实现的,这些宏定义与 stdarg.h 头文件中,是标准库的一部分。这个头文件声明了一个类型 va_list 和三个宏:va_start, va_arg , va_end. 我们可以声明一个类型为 va_list 的变量。与这几个值配合使用,访问参数的值。

省略号:表示此处可能传递数量和类型未确定的参数。 函数声明一个叫 var_arg 的量,它用于访问参数列表的未确定部分,这个变量通过调用 va_start 来初始化,它的第一个参数是 va_list 变量的名字,第二个参数是省略号最后一个有名字的参数。

为了访问参数,需要使用va_arg, 这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型。var_arg返回这个参数的值,并使var_arg指向下一个可变参数。当访问玩完最后一个可变参数之后,我们需要调用va_end.

注意:

  1. 这些宏无法判断实际存在的参数的数量;
  2. 这些宏无法判断每个参数的类型。

例子:

// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 
#include 

using namespace::std;

int main()
{
	//size_t
	//	Strlen(char* string_);

	//char* _string = "yybb, zjig";
	//// cout << "Length = " << Strlen(_string) << endl;

	//void print();
	//print();
	float
		average(int n_values_, ...);
	cout << " average = " << average(4, 65, 85, 36, 52) << endl;


    return 0;
}

/*
** 计算指定数量值得平均值
*/
float
average(int n_values_, ...)
{
	va_list  var_arg;
	int count;
	float sun = 0;

	/*
	** 准备访问可变参数
	*/
	va_start(var_arg, n_values_);

	/*
	** 添加取自可变参数列表的值
	*/
	for (count = 0; count < n_values_; count += 1)
	{
		sun += va_arg(var_arg, int);
	}

	/*
	** 完成处理可变参数
	*/
	va_end(var_arg);

	return sun / n_values_;

}

void print()
{
	cout << "* - * - * - * - print one - * - * - * - *" << endl;
	print();
	cout << "* - * - * - * - print two - * - * - * - *" << endl;
}

size_t
Strlen(char* string_)
{
	int _length = 0;

	/*
	** 依次访问字符串的内容,技术字符数,直到遇到NULL中止
	*/
	while (*string_++ != '\0')
	{
		_length += 1;
	}

	return _length;
}

你可能感兴趣的:(C++)