Здесь Я нашел пример того, как varargs можно использовать в C.
#include <stdarg.h>
double average(int count, ...)
{
va_list ap;
int j;
double tot = 0;
va_start(ap, count); //Requires the last fixed parameter (to get the address)
for(j=0; j<count; j++)
tot+=va_arg(ap, double); //Requires the type to cast to. Increments ap to the next argument.
va_end(ap);
return tot/count;
}
Я могу понять этот пример только в некоторой степени.
-
Мне непонятно, почему мы используем
va_start(ap, count);
. Насколько я понимаю, таким образом мы устанавливаем итератор в свой первый элемент. Но почему он не установлен в начале по умолчанию? -
Мне непонятно, почему нам нужно дать
count
в качестве аргумента. Не может ли C автоматически определить количество аргументов? -
Мне непонятно, почему мы используем
va_end(ap)
. Что это изменит? Установил ли он итератор в конце списка? Но он не установлен в конец списка по циклу? Более того, зачем нам это нужно? Мы больше не используемap
; почему мы хотим его изменить?