#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);
}我写了这段代码,但输出是非常strange.Who可以告诉我的原因。输出:
esekilvxen245 [10:54am] [/home/elqstux/useful] -> ./a.out
1 2 3 4 1748292352 1748370624
1 2 1748295184 1745597392
1 10 1748295184 1745597392发布于 2014-04-24 17:01:06
循环的结束条件是j小于零,但是在调用中不会以负数结束参数列表。这意味着循环将继续,直到找到一个负数,负数可以在堆栈上的任何位置,远远超出您传递的参数。
叫它像这样。
f(1, 2, 3, 4, -1);https://stackoverflow.com/questions/23264295
复制相似问题