IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言可变参数 -> 正文阅读

[C++知识库]C语言可变参数

stdarg.h头文件为函数提供了函数可以接受可变数量的参数。必须按照下面步骤:
1、提供一个使用省略号的函数原型;
2、在函数定义中创建一个va_list类型的变量;
3、用宏把该变量初始化为一个参数列表;
4、用宏访问参数列表;
5、用宏完成清理工作。
例如:

void func2(int n, ...);
void func2(const char * s, int k , ...);

省略号的前一个参数起着特殊的作用,标准用parmN这个术语来描述该形参。传递给该形参的实际参数是省略号部分代表的参数数量。
声明在stdarg.h中的va_list类型代表一种用于储存形参对应的形参列表中省略号部分的数据对象。
定义在stdarg.h中的va_start(),把参数列表拷贝到va_list类型的变量中。该宏有俩个参数:va_list类型的变量和parmN形参。
使用宏va_arg()访问参数列表的内容。该宏接收俩个参数:一个va_list类型的变量和衣蛾类型名。第一次调用va_arg(),它返回参数列表的第一项;第二次调用va_arg(),它返回参数列表的第二项;以此类推。表示类型的参数指定了返回值的类型。
使用va_end()宏完成清理工作。例如释放动态分配用于储存参数的内存。该宏接收一个va_list类型的变量。
调用va_end()(ap)后,只有用va_start重新初始化ap后,才能使用ap。
因为va_arg()不提供退回之前参数的方法,所有有必要保存va_list类型变量的副本。C99新增了一个宏va_copy()用于处理这种情况。该宏接收俩个va_list类型的变量作为参数,它把第二个参数拷贝给第一个参数。

double sum(int lim , ...)
{
	int tic;
	va_list ap;
	va_list at;
	va_copy(at, ap)
	va_staart(ap, lim);	// 把ap初始化为参数列表
	tic = va_arg(ap, double);		// 检索第一个参数
	double toc = va_arg(ap, double);	// 检索第二个参数
	va_end(ap);		// 清理工作
}
#include <stdlib.h>
#include <stdarg.h>

double sum(int lim, ...);
int main()
{
	double s = 0.0;
	double t = 0.0;
	
	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("sum(3, 1.1, 2.5, 13.3)=[%lf]\n", s);
	printf("sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1)=[%lf]\n", s);
	
	return 0;
}


double sum(int lim, ...)
{
	va_list ap;
	va_list at;
	va_copy(at, ap);
	double tot = 0;
	int i = 0;
	va_start(ap, lim);	// 把ap初始化为参数列表
	for(i = 0; i < lim; i ++)
	{
		tot += va_arg(ap, double);	// 访问参数列表的每一项, i=0 访问第一个参数
	}
	va_end(ap);
	
	return tot;
}

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:30:29  更:2022-03-21 20:32:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:56:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码