#include <stdio.h>
#include <stdarg.h>
void f(int parameter, ...)
{
va_list ap;
int j;
va_start(ap, parameter);
for (j = parameter; j >= 0; j = va_arg(ap, int))
printf("%d ", j);
va_end(ap);
printf("\n");
}
int main()
{
f(1, 2, 3, 4);
f(1, 2);
f(1);
}
我写这段代码,但输出很奇怪。谁能告诉我原因。 输出:
esekilvxen245 [10:54am] [/home/elqstux/useful] -> ./a.out
1 2 3 4 1748292352 1748370624
1 2 1748295184 1745597392
1 10 1748295184 1745597392
答案 0 :(得分:2)
循环的结束条件是j
小于零,但您不能在调用中以负数结束参数列表。这意味着循环将继续,直到找到负数,该数字可以是堆栈中的任何位置,远远超出您传递的参数。
称之为例如。
f(1, 2, 3, 4, -1);