stdarg.h的库函数用法小结
Notice also that va_arg does not determine either whether the retrieved argument is the last argument passed to the function (or even if it is an element past the end of that list). The function should be designed in such a way that the amount of parameters can be inferred in some way by the values of either the named parameters or the additional arguments already read.
#include <iostream.h> #include <stdarg.h> #define N 5 void print(int x,...) { va_list arg; int i; int a[N]; va_start(arg,x); a[0]=a1; for(i=1;i< N;i++) a[i]=va_arg(arg,int); va_end(arg); for(i=0;i< N;i++) cout<<a[i]<<endl; } void main() { print(6,12,24,36,48); } C语言中的printf函数的参数就是可变参数。 printf() 函数的定义如下: 本文就这个问题进行一些探讨,希望能对大家有些帮助. 下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的 type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); 下面我们写一个简单的可变参数的函数,改函数至少有一个整数 va_start(arg_ptr, i); 以下转自:博客 http://baike.baidu.com/view/3373010.htm?fr=ala0_1 http://blog.163.com/zhoucl_0220/blog/static/145454692009105104356573/ http://blog.csdn.net/crcr http://hi.baidu.com/sjh9/blog/item/4f5d6fdf1696aa1048540344.html (二)可变参数在编译器中的处理 我们知道va_start,va_arg,va_end是在stdarg.h中被定义成宏的, typedef char * va_list; #define _INTSIZEOF(n) / #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) / #define va_end(ap) ( ap = (va_list)0 ) 定义_INTSIZEOF(n)主要是为了某些需要内存的对齐的系统.C语言的函 高地址|-----------------------------| 然后,我们用va_arg()取得类型t的可变参数值,以上例为int型为例,我 高地址|-----------------------------| 最后要说的是va_end宏的意思,x86平台定义为ap=(char*)0;使ap不再 (三)可变参数在编程中要注意的问题 因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢, va_start(arg_ptr, i); 小结: |
stdarg.h的库函数用法小结相关推荐
- stdarg.h中三个宏va_start ,va_arg\va_end及vsprintf 的应用
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数form ...
- setscale方法的用法_基于BigDecimal.setScale的用法小结
1. BigDecimal num1 = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失 2. BigDecimal num2 = new BigDecimal( ...
- C++:函数参数不确定时用cstdarg(stdarg.h)
◎用法: func( Type para1, Type para2, Type para3, ... ) { /****** Step 1 ******/ va_list ap ...
- Linux: chmod 和 chown用法小结
chmod chmod指令是更改文件读写执行权限的. 文件权限可以通过ls -a或ll来看,在每个文件前有10个字符,第一个是d是文件夹,否则为一划.后面三组rwx,分别是读取,写入和执行的权限; 三 ...
- extern 用法小结
1 基本解释 extern可以置于变量或者函数 前,以标示变量或者函数 的定义在别的文件中,提示编译器遇到此变量和函数 时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题: ...
- STL bitset用法小结(详细)附蓝桥杯题:明码
bitset用法小结 使用bitset类型需引入头文件 #include< bitset > 它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间. bitset类 ...
- TinyXML用法小结
TinyXML用法小结 1. 介绍 Tinyxml的官方网址:http://www.grinninglizard.com 官方介绍文档:http://www.grinninglizard.c ...
- oracle @spool,Oracle spool 用法小结
Oracle spool 用法小结 转自:http://wallimn.javaeye.com/blog/472182 对于SPOOL 数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句 ...
- js push(),pop(),unshift(),shift()的用法小结
js中push(),pop(),unshift(),shift()的用法小结 1.push().pop()和unshift().shift() 这两组同为对数组的操作,并且会改变数组的本身的长度及内容 ...
最新文章
- “System.Data.OracleClient.OracleConnection”已过时
- 《LeetCode力扣练习》第13题 C语言版 (做出来就行,别问我效率。。。。)
- 9、图书修改,删除功能
- VD-BERT:用BERT搭建统一的视觉对话模型
- swift5的代理的使用
- The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;
- linux嵌入式平台测试,protobuf-c 在arm linux 嵌入式平台的使用 测试
- ipc-rpc-xmlrpc
- oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]
- 安卓TextView的常用属性
- Google浏览器插件
- Win7下Hyenae的安装
- 开机黑屏,硬盘灯不亮,没有自检画面,进不去bios
- VR技术在数据中心3D机房中的应用(下)
- aws 数据库迁移_使用AWS进行数据库迁移
- 【devops】非必要 不要自建harbor 能力不足 真的被坑的服了 阿里云ACR不香吗?k8s接入ACR
- Tobii pro lab学习笔记3_Metrics统计指标
- 基于matlab的静电场边值,典型静电场场图解析解(含Matlab程序).pdf
- Procreate iPad绘画教程
- ping 丢包 网络摄像头_网络监控摄像机丢包的原因分析
热门文章
- python教程三角函数_Python入门之三角函数tan()函数实例详解
- 小米台灯底座接口很松_呵护你的眼,米家台灯1S
- linux下netty接收不到服务,Netty 发送消息失败或者接收消息失败的可能原因
- 设置在本文件里查找_Win 10 自带聚焦搜索?这么设置轻松查找电脑文件
- python16进制字节序_第 1 章 套接字、IPv4和简单的客户端/服务器编程
- 综述论文要写英文摘要吗_速成本科毕业论文初稿!!!
- 如何通过其他主机查看Apahce服务器的运行状态
- linux 触摸屏驱动编写
- 10分钟搞懂:亿级用户的分布式数据存储解决方案
- 深度学习(训练/开发/测试集)的划分技巧