C语言中的可变参数

本文深入探讨了C语言中函数printf()的实现机制,特别是其处理可变参数的能力。通过解析三个关键宏:va_start(), va_arg(), va_end(),以及了解va_list类型的作用,读者将能够理解并掌握如何有效利用printf()函数进行复杂输出操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我在学C语言的时候对函数printf()特别好奇,因为它后面的参数是可以变的,很长一段时间我也不明白这是怎么实现的,现在附带说明,写得有点不伦不类:
# include<iostream>
# include<stdarg.h>
using namespace std;

double Add(int first, ...) 
{
 	va_list para;
 	va_start(para, first);
 	double sum = first;
	sum += va_arg(para, int);
	sum += va_arg(para, double);
	sum += va_arg(para, double);
	
	va_end(para);
	return sum;
}
		  
int main()
{
 	printf("%.1lf\n", Add(1, 3, 3.1, 3.2));
 	system("PAUSE");
 	return 0;
}
 


关键使用到了三个宏,va_start(),va_arg(),va_end(),以及一个va_list类型,这三个宏定义在stdarg.h中。这是C标准库的一部分。

va_start(va_list para, first_argu) 这个宏类似于创建一个“流”对象,并要用可变参数前面的一个参数初始化。具体实现我也不清楚。

va_arg(va_list para, type) 这个宏类似于从“流”中提取可变参数,type是可变参数类型。

va_end(para) 关闭“流”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值