Переменных аргументов в C
Я пишу метод, который принимает число n и n ints (переменное число), и эта функция вернет сумму ints, не включая n. я застрял на том, как получить доступ к каждому параматеру индивидуально. Вот что у меня есть до сих пор, я читал об этом в интернете и надеюсь, что я на правильном пути. метод, который кажется полезным найти в сети:
va_start()
va_arg()
va_end()
int sumv(int n, ...)
{
va_list list;
int sum = 0;
while(n>0)
{
//*********************
//this is the part where I am stuck on, how do I get each paramater?
//I know it will be an int
//*********************
n--;
}
return sum;
}
2 ответа:
Это должно выглядеть примерно так:
int sumv(int n, ...) { va_list list; va_start(list, n); int sum = 0; while(n>0) { sum += va_arg(list, int); n--; } va_end(list); return sum; }
Вы в основном ищете это:
Это выводит сумму первых пяти натуральных чисел,#include <stdio.h> #include <stdarg.h> int sumv (int n, ...) { va_list list; int sum = 0; va_start (list, n); while (n-- > 0) sum += va_arg (list, int); va_end (list); return sum; } int main (void) { printf ("%d\n", sumv (5, 1, 2, 3, 4, 5)); return 0; }
15
.Основная идея заключается в том, чтобы
va_start
, давая как Список для использования, так и конечный аргумент в функции перед началом аргументов переменной.Затем каждый вызов
va_arg
дает вам следующий аргумент указанного типа (int
здесь). Этот конкретный код вызывает его на основе вашего счетчика, но вы также можете использовать значение sentinel в конце, например отрицательное число, при условии, что отрицательные числа недопустимы в аргументах.Затем, после обработки всех аргументов, используйте
va_end
для завершения обработки.