C语言中编写可变参数函数

发布时间 - 2026-01-11 02:21:50    点击率:

通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似:

void f1(int n,...);

其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似:

void f1(int n,...)

{

va_list ap;

va_start(ap,n);  //初始化参数列表

double first=va_arg(ap,double); //取第一个参数

int second=va_arg(ap,int);  //取第二个参数

...

va_end(ap); //清理工作

}

看一个求和的例子:

#include < stdio.h > #include < stdarg.h > 
 double sum( int  , 
);
 int main( void 
)

{

 double 
s,t;

s
 = sum( 3 , 1.1 , 2.2 , 13.3 
);

t
 = sum( 6 , 1.1 , 2.1 , 13.1 , 4.1 , 5.1 , 6.1 
);

printf(
 " return value for " 
\

 " sum(3,1.1,2.2,13.3):  %g\n " 
,s);

printf(
 " return value for " 
\

 " sum(6,1.1,2.1,13.1,4.1,5.1,6.1):  %g\n " 
,t);

 return  0 
;

}
 double sum( int  lim, 
)

{

va_list ap;

 double total = 0 
;

va_start(ap,lim);

 int 
i;

 for (i = 0 ;i < lim;i ++ 
)

total
 += va_arg(ap, double 
);

va_end(ap);

 return 
total;

}
 

C语言对可变参数的使用还是有点麻烦,不如ruby和java简便。比如ruby中定义并使用可变参数参数:

def sum(*e)

e.inject{|sum,i| sum+=i}

end

sum(1,2,3,4,5)=>15


# c  # 可变参数函数  # c语言可变参数函数  # C语言可变参数与函数参数的内存对齐详解  # C语言main()函数的参数问题详解  # C语言 函数缺省参数详情  # C语言可变参数函数详解  # C语言的可变参数函数实现详解  # C语言函数的参数使用指针  # C语言中函数参数的入栈顺序详解及实例  # C语言深入讲解函数参数的使用  # 第一个  # 第二个  # 而用  # 头文件  # va_start  # double  # ap  # va_arg  # include  # va_end  # lt  # cpp  # void  # stdarg  # code  # int  # class  # brush  # va_list  # pre 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网易LOFTER官网链接 老福特网页版登录地址  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何获取上海专业网站定制建站电话?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  phpredis提高消息队列的实时性方法(推荐)  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何在阿里云ECS服务器部署织梦CMS网站?  中国移动官方网站首页入口 中国移动官网网页登录  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel怎么实现验证码(Captcha)功能  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何注册花生壳免费域名并搭建个人网站?  ,交易猫的商品怎么发布到网站上去?  高端建站如何打造兼具美学与转化的品牌官网?  如何用PHP工具快速搭建高效网站?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在新浪SAE免费搭建个人博客?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  微信小程序 HTTPS报错整理常见问题及解决方案  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Windows Hello人脸识别突然无法使用  大连 网站制作,大连天途有线官网?  昵图网官网入口 昵图网素材平台官方入口  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何用IIS7快速搭建并优化网站站点?  Laravel怎么在Blade中安全地输出原始HTML内容  EditPlus中的正则表达式实战(5)  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何用西部建站助手快速创建专业网站?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何在Windows 2008云服务器安全搭建网站?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Python文件操作最佳实践_稳定性说明【指导】  如何在 Pandas 中基于一列条件计算另一列的分组均值  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】