Latest web development tutorials

C parametrem zmiennym

Czasami można spotkać taką sytuację, chcesz działać ze zmienną liczbą argumentów, zamiast ustalonej liczby argumentów. Język C dla tego scenariusza stanowi rozwiązanie, które pozwala na zdefiniowanie funkcji, która może przyjąć różną liczbę parametrów w zależności od specyficznych potrzeb. Poniższy przykład przedstawia definicję taką funkcję.

int func(int, ... ) 
{
   .
   .
   .
}

int main()
{
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

Należy pamiętać, żefunc () funkcja ostateczne pisemne argumenty wielokropek, że trzy kropki (...),że argument przed elipsy jest zawszeint,stanowiących całkowitą liczbę zmiennych parametrów mają być przekazane. Aby korzystać z tej funkcji, trzeba użyćstdarg.h plik nagłówka, który zapewnia funkcjonalność zmiennych parametrów w celu uzyskania funkcji i makr.Specyficzne etapy są następujące:

  • Definicja funkcji ostatni parametr elipsę elipsa przed parametru jest zawszeint oznacza liczbę parametrów.
  • Tworzenie zmiennej typuva_list w definicji funkcji, tego typu jest zdefiniowana w pliku nagłówkowym stdarg.h.
  • Int parametry i makra użytku va_startzainicjować zmiennąva_listjako lista parametrów. Stdarg.h va_start Makro jest zdefiniowana w pliku nagłówkowym.
  • Za pomocą makrava_arg i zmienne va_listaby otworzyć listę parametrów dla każdego elementu.
  • Do czyszczeniava_end daną va_listpamięć zmienną użyć makra.

Przejdźmy teraz wykonaj kroki opisane powyżej funkcje pisać o zmiennej liczbie argumentów i zwraca ich średnio:

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)
{

    va_list valist;
    double sum = 0.0;
    int i;

    /* 为 num 个参数初始化 valist */
    va_start(valist, num);

    /* 访问所有赋给 valist 的参数 */
    for (i = 0; i < num; i++)
    {
       sum += va_arg(valist, int);
    }
    /* 清理为 valist 保留的内存 */
    va_end(valist);

    return sum/num;
}

int main()
{
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

Jeżeli powyższy kod jest kompilowany i wykonywany, to daje następujący wynik. Należy zauważyć, żeśrednia () jest wywoływana dwukrotnie, za każdym razem pierwszy parametr oznacza całkowitą liczbę przenoszone są zmienne parametry.Elipsy są wykorzystywane w celu dostarczenia zmienną liczbę argumentów.

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000