Я искал способ, чтобы пройти неопределенное количество аргументов функции, когда я наткнулся на способе сделать это с помощью va_list
, va_start
и va_end
из stdarg.h как показано в приведенной программе here.
Но не смог найти нигде путь доступа к неопределенному числу аргументов, переданных функции случайным образом.Случайным доступ к неопределенному числу аргументов функции в C
Способ использования va_list
из файла заголовка stdarg.h является последовательным доступом к аргументам. Как только один аргумент читается, нет возврата.
Есть ли способ случайного доступа к этим аргументам?
EDIT: Мне было предложено опубликовать код вместо ссылки на содержащую его страницу. Итак, вот оно:
#include <stdarg.h>
#include <stdio.h>
/* this function will take the number of values to average
followed by all of the numbers to average */
double average (int num, ...)
{
va_list arguments;
double sum = 0;
/* Initializing arguments to store all values after num */
va_start (arguments, num);
for (int x = 0; x < num; x++)
{
sum += va_arg (arguments, double);
}
va_end (arguments); // Cleans up the list
return sum/num;
}
int main()
{
printf("%f\n", average (3, 12.2, 22.3, 4.5));
/* here it computes the average of the 5 values 3.3, 2.2, 1.1, 5.5 and 3.3
printf("%f\n", average (5, 3.3, 2.2, 1.1, 5.5, 3.3));
}
Поместите каждый в массив? –
@WeatherVane Я думал то же самое, просто выполняйте функцию, которая читает аргумент thoses внутри вашего va_list и сохраняет их в массиве? Возможно, это не то, что вы хотите сделать, но затем добавьте некоторые исправления. – xoxel
Вам все равно нужно знать типы и количество аргументов (printf делает это, перебирая строку формата) BTW: также существует жесткий предел количества аргументов, которые может выполнять функция. – joop