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也像下移动到下一个变量的位置了希望大家能够明白。