C/C++ 笔记
QQ : 1841545843
邮箱 : jiaxx903@163.com
可变参数列表是通过宏来实现的,这些宏定义与 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.
注意:
- 这些宏无法判断实际存在的参数的数量;
- 这些宏无法判断每个参数的类型。
例子:
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <stdarg.h>
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;
}