无法使用变量参数实现函数

我试图用变量参数实现函数,但是将垃圾值作为输出。我在尝试自己实现之前已经参考过这篇文章 。可以任何人帮我解决这段代码,因为我无法理解这段代码中的错误。

/* va_arg example */ #include  /* printf */ int FindMax (int n, ...) { int i,val,largest,*p; p=&n; p+=sizeof(int); largest=*p; for (i=1;ival)?largest:val; } return largest; } int main () { int m; m= FindMax (7,702,422,631,834,892,104,772); printf ("The largest value is: %d\n",m); return 0; } 

问题是您尝试直接访问堆栈中的位置,您可以在其中找到您的参数。 调用约定是机器的,有时是特定于编译器的,并且是一个你永远不能依赖的实现细节,所以你可能在你认为的堆栈中找不到你的参数。 就C而言,您的代码只是调用未定义的行为

解决方案:使用stdarg.h访问参数,这就是它的用途。

 #include  /* printf */ #include  int FindMax (int n, ...) { va_list ap; int i,val,largest; va_start(ap, n); // <- ap is the argument pointer, this initializes it // based on the last non-variadic argument. largest=0; while (n--) { val = va_arg(ap, int); // <- fetch argument and advance pointer largest=(largest>val)?largest:val; } va_end(ap); // done with argument pointer return largest; } int main () { int m; m= FindMax (7,702,422,631,834,892,104,772); printf ("The largest value is: %d\n",m); return 0; }