内容来自《c和指针》,整理后方便个人理解

stdarg.h

菜鸟教程 - <stdarg.h>

类型
va_list
va_start
va_arg
va_end
#include <stdio.h>
#include <stdarg.h> float
average( int n_values, ...);/*省略号用于提示此处可能传递数量和类型未知的参数*/ int
main( int argc, int** argv )
{
printf("%f\n", average( 6, 1 , 2, 3, 4, 5, 6) ); return 0;
} float
average( int n_values, ...)
{
va_list var_arg;
/*
**声明一个va_list类型的变量用于访问参数列表未知部分
*/
int count;
float sum = 0; va_start( var_arg, n_values );
/*
**var_arg初始化,第1个参数是va_list类型的变量名,第2个参数是省略号之前最后一个有名字的参数
*/
for( count = 0; count < n_values; count++ ){
/*
**用n_values指定了实际传递的参数数量
*/
sum += va_arg( var_arg, int );
/*
**va_arg访问参数,接受va_list变量和参数列表下一个参数的类型,var_arg指向下一个可变参数
*/
} va_end( var_arg ); return sum / n_values;
}

注意事项

  1. var_arg的第1个参数是va_list类型的变量名,第2个参数是省略号之前最后一个有名字的参数
  2. 函数的原型至少要有一个有名字的参数来保证va_start的使用
  3. va_arg的参数是va_list类型的变量敏感和参数列表下一个参数的类型
  4. 参数列表中的可变参数部分并没有原型,所有的作为可变参数传递给函数的值都将执行缺省参数类型提升
  5. va_arg无法正确识别缺省参数类型提升。如果char,short和float被提升为int,double传递给函数,在va_arg中使用需要格外小心
  6. 在va_arg中使用错误的参数类型会导致C标准未定义的结果

最新文章

  1. log4j:WARN Please initialize the log4j system properly 问题解决
  2. 转载:LoadRunner11-遇到问题及解决办法
  3. centos vwwareTools 拷贝文件设置
  4. javascript如何判断一个对象是否是窗口
  5. jQuery 對table的基本操作
  6. 基于百度地图api + AngularJS 的入门地图
  7. 【Android界面实现】可旋转的汽车3D模型效果的实现
  8. 【转载】 ISO14229系列之一:简介
  9. Linux学习笔记:【001】Linux内核分析
  10. Hive 任务优化 tips
  11. 面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
  12. android contentprovider内容提供者
  13. CSS--点击改变样式
  14. 打通WordPress和微信公众号
  15. Java连接postgreSQL数据库,找不到表。
  16. LSTM神经网络
  17. about BFC
  18. SpringMVC配置session过期拦截器,返回登录页面
  19. 浅谈Android Studio3.0更新之路(遇坑必入)
  20. sychronized关键字(多线程)

热门文章

  1. 小程序 读取照片 EXIF 元信息
  2. Abp Vnext3 vue-admin-template(二用户退出)
  3. Flex语法和常用鼠标手势
  4. linux性能瓶颈排查--内存+cpu+网络+磁盘+应用瓶颈
  5. pibbtimq高级使用技术,双向通信
  6. 【JDK】分析 String str=““ 与 new String()
  7. vue-cli3 创建多页面应用项目
  8. 3.8学习总结——Android保存信息
  9. pymysql基础教程
  10. Nginx系列(6)- nginx: [error] CreateFile() &quot;D:\nginx-1.20.1/logs/nginx.pid&quot; failed (2: The system cannot find the file specified)