C语言的可变参数

C语言的可变参数C语言的可变参数代码1#include<stdio.h>

2#include<stdarg.h>

3

4voidPrintFloats (intamount, ...)

5{

6inti;

7doubleval;

8printf ("Floats passed:");

9va_list vl;

10va_start(vl,amount);

11for(i=0;i<amount;i++)

12{

13val=va_arg(vl,double);

14printf ("t%.2f",val);

15}

16va_end(vl);

17printf ("n");

18}

19

20intmain ()

21{

22PrintFloats (3,3.14159,2.71828,1.41421);

23return0;

24}
va_start初始化指针,va_arg读取参数,va_end将指针置0。

va_start实际上就是取得变长参数在栈中的起始地址,栈由高地址向低地址分配的特点及C语言从右向左将参数压栈的特点决定了其实现方式。

define va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

v是最后一个确定的函数,通过取其地址,加上其字节对齐后的内存大小,就可以取得可变参数的首地址,详细见参考。

参考:

C++ : Reference : C Library : cstdarg (stdarg.h) : va_start

va_list,va_start,va_arg,va_end——变长参数实现机制


原文链接: https://www.cnblogs.com/lbsx/archive/2010/08/18/1802891.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14015

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午1:29
下一篇 2023年2月7日 下午1:29

相关推荐