C语言函数 变长参数

来源:互联网 发布:澳洲淘宝 编辑:程序博客网 时间:2024/04/29 14:49

用C语言实现拥有变长参数列表的函数,由于参数是顺序压栈的,所以可以由程序员自己利用指针取到每一个参数

void  args_func(  Type *arg0, ... )

 {   

 Type *ap;  

 ap = ((Type *)&arg0) + sizeof(arg0);//取得栈顶地址加最后一个固定参数的地址偏移,得到第一个不定参数的地址        

 ap =  ap + sizeof(type);  //根据约定的不定参数类型取得下一个参数,每调用一次该句,取到下一个参数

...

}

变长参数列表至少有一个必有的参数,不能全部参数都为可选参数

在C语言里可以利用已定义好的一系列宏来实现变长参数:

#include<stdarg.h>//包含头文件

//假设有n个类型为Type的参数

void arg_func(int n,...)

{

 int i;

Type temp;

va_list ap;//定义一个 va_list类型的变量ap

va_start(ap,int);//初始化ap,使其指向最后一个必选参数

for(i=0;i<n;i++)

temp = va_arg(ap,Type);//顺次取得所有参数

va_end(ap);

}

原创粉丝点击