对va_start,va_arg,va_end的认识
来源:互联网 发布:如何选择电视机 知乎 编辑:程序博客网 时间:2024/06/12 12:05
status Initarray(array &a,int din,...);//若维数din和随后的长度合法,则构造相应的数组A,并返回OK。
status value(array a,ElemType &e,...);//若各下标(这里的下标在函数中是"...")不超界则e赋值为所指定的A的元素之,并返回OK
那这个省略号所代表的数值如何提取呢?请看如下的一个简单的程序
#include<stdio.h>
#include<stdarg.h>
int N=5;
void Stdarg(int a1,...)//这里一定要用3个'.'表示省略,多一个少一个都会犯错,我试过了
{
va_list argp;//这里定义argp是可变参数的类型,
int i;
int ary[5];
va_start(argp,a1);//这里的a1就是5,这句话的作用好比指针,让argp指向a1
ary[0]=a1;
for(i=1;i<N;i++)
ary[i]=va_arg(argp,int);//每运行一次va_arg则argp自动指向下一个变量比如第一次运行是5第二次所得到的值就是12了
va_end(argp);//有点像文件章节的脱钩fclose的性质让argp脱钩
for(i=0;i<N;i++)
printf("%d ",ary[i]);
}
void main()
{
Stdarg(5,12,64,34,23);
}
这样一解释大家应该明白这4个函数到底是做什么用了吧,再一些细节,我就讲不出了由于水平有限只能解释道这里了如果还有什么不明白的就看我那个转载的,那个写得太详细里。
有一个地方不得不说一下va_arg(argp,int);这个函数每运行一次argp的指针指向下一个地址但是这个下一个地址是下一个数值的地址而并不是内存中的地址如表
argp第一次指向的是5也就是指向1000这个地址再一次运行va_arg(argp,int);的时候argp指针改变指向的是12的地址8000也可能是1002(这个地址完全是系统自动分配的,并不是以线形方式进行分配)以此类推
还有一点要说明一下
va_start(argp,a1);
ary[0]=a1;
for(i=1;i<N;i++)/**********************/
ary[i]=va_arg(argp,int);
大家发现没有i从1开始
因为va_start(argp,a1);这个函数让argp指向a1的时候的同时argp也像下移动到下一个变量的位置了希望大家能够明白。
- 对va_start,va_arg,va_end的认识
- va_start,va_arg,va_end的用法
- va_start va_end va_arg的用处
- 可变参数va_start, va_arg, va_end的用法
- va_start va_arg va_end 的使用和原理
- 宏:va_list、va_start、va_arg、va_end的使用
- 可变参数va_start, va_arg, va_end的用法
- 可变参数va_start,va_arg,va_end的用法
- 宏:va_list、va_start、va_arg、va_end的使用
- 可变参数va_start,va_arg,va_end的用法
- va_list、va_start、va_arg、va_end宏的学习
- va_list,va_start,va_arg,va_end的效率
- va_start va_arg va_end 的原理与实例
- va_list、va_start、va_arg、va_end宏的使用方法
- va_start、va_end、va_list、va_arg的使用整理
- va_start va_arg va_end 的使用和原理
- va_start va_arg va_end 的使用和原理
- va_start ,va_arg和va_end的应用
- Axis2和已有web项目集成
- 学习
- STL学习笔记----16.STL算法之 (数值算法)
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- int main(int argc,char *argv[])中两个参数的说明
- 对va_start,va_arg,va_end的认识
- C++笔试
- android-NDK学习开发二--HelloWorld
- nginx 配置root运行
- NFS挂载不上时
- 使用rsync完成Linux服务器间同步目录
- 不可不知道国内虚拟化厂商
- .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
- 关于APACHE 无权限访问的问题 403 解决方案