C中的参数列表:递增/递减va_arg?

时间:2016-01-29 15:53:17

标签: c variadic-functions

我在参数列表中调用va_arg时尝试访问下一个或上一个元素。 " N"实际上是参数列表的长度。

va_list pointer;

va_start(pointer, n);
int temp = va_arg(pointer, int);
...
if(temp < va_arg(pointer, int))...
...

void va_end(va_list pointer)

实际上可以交换参数列表的两个位置吗? 同样的事情就像在bubblesort中交换两个整数一样。

1 个答案:

答案 0 :(得分:2)

va_*“函数”获得的“列表”(它们通常被实现为预处理器宏)是堆栈的一部分,作为一个真正的堆栈,你只能“弹出”它的值

所以不,你不能“交换”价值,或倒退。你甚至不能“推”值,只能“弹出”。

如果要交换值,则必须将两个值都放入变量中,并交换这些变量的值。