VA家族
来源:互联网 发布:云南广电网络集团曹兵 编辑:程序博客网 时间:2024/06/10 09:00
说来也比较奇怪.以前读代码的时候,总是囫囵吞枣的样子,遇到不懂的东西,总是一带而过.没有把它们认真的弄明白.我深知自己有这种偷懒的缺点.但是总是无法控制自己一错再错.昨天ken还不厌其烦的给我鼓励.今天我稍微的认真了一把,便发现了va_list/va_start/va_arg/va_end等函数,我不明白.
于是便找了一些资料.让自己彻底的弄清楚这些东西是干吗用的!
下面我说说我对它们的理解!
在ANSI C标准中,va的宏定义在stdarg.h中,它们有:va_list,va_start,va_arg,va_end,va_copy,等家族成员.下面我用我看到的一个例子结合我自己的理解来描述一下这些函数的具体功能.
求任意个自然数的平方和:
/*************************
*int SqSum(int n1, …)
*{
*va_list arg_ptr;
*int nSqSum = 0, n = n1;
*
*va_start(arg_ptr, n1);
*while (n > 0)
*{
* nSqSum += (n * n);
* n = va_arg(arg_ptr, int);
*}
*va_end(arg_ptr);
*
*return nSqSum;
*}
**// 调用时
**int nSqSum = SqSum(7, 2, 7, 11, -1);
*******************************/
这个函数的具体执行是这样的:
1.va_list arg_prt 先定义了一个指向可变参数列的参数arg_ptr;
2.va_start(arg_ptr,n1)表示开始对可变参数进行解析;
3.n = va_arg(arg_ptr,int)表示将当前可变参数指针指向下一个可变参数,并将其以int形式返回给n;
4.当遇到n<0的情况,便退出循环.
5.va_end(arg_ptr)停止解析,将可变参数指针清空.
# 6.va_copy(dest, src):dest,src的类型都是va_list,va_copy()用于复制参数列表指针,将dest初始化为src.
也就是说va家族更加方便了可变参数函数的使用.
也不知道我的理解是否贴切,希望大家给予指正!
共同学习.
- VA家族
- va 家族(可变参家族)
- VA
- 家族
- 家族
- 家族
- 家族
- 家族
- 家族
- 家族
- VA使用
- VA使用
- 关于vA
- SQL家族
- Watir 家族
- UNIX家族
- Watir 家族
- 施耐德家族
- Meta标签详解
- 我受不了了!流氓软件与Google
- 社会搜索
- 利用SharpZipLib实现实时zip压缩下载整个目录
- redhat下cvs服务器配置及客户端使用
- VA家族
- 页面跳转
- 详细需求与分析
- sqlserver中的数据库排序规则(Collation)指定错误使中文变成问号
- 监测你的SQL SERVER--让瓶颈暴露
- NHKとは
- 老子智慧
- 给hacke拨乱反正 黑客、红客、蓝客究竟是什么[摘]
- 中国最大的悲哀是没有贵族