现在的位置: 首页 > 综合 > 正文

C语言可变参数实现函数重载

2013年12月01日 ⁄ 综合 ⁄ 共 837字 ⁄ 字号 评论关闭

ANSI C 标准中,有可变参数的概念,可以通过一组宏实现

 

    va_list arg_ptr:                       定义一个可变参数列表指针
    
va_start(arg_ptr, argN):        让arg_ptr指向参数argN
    
va_arg(arg_ptr, type):          返回类型为type的参数指针,并指向下一个参数
    
va_copy(dest, src):               拷贝参数列表指针,src->dest,
    
va_end(arg_ptr):               清空参数列表,并置参数指针arg_ptr无效。每个va_start()必须与一个va_end()对应

 


 

 

 

参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈

因此,假设定义一个可变参数的函数 void f(int x, ...), 通过f( x, y, z) 调用,那么,z先入栈,然后y, 然后x。 因此我们只要得到任何一个变量的地址,就可以找到其它变量的地址。

va_start(va, n) 就是让va指向n的地址。这样,后面就可以得到所有参数的值。前提是,我们必须知道每个参数的类型。在本例子中,都是int类型。

 

抱歉!评论已关闭.