Latest web development tutorials

C variablen Parameter

Manchmal kann man eine solche Situation auftritt, möchten Sie mit variablen Anzahl von Argumenten zu funktionieren, und nicht als eine vorgegebene Anzahl von Argumenten. C-Sprache für dieses Szenario bietet eine Lösung, die eine Funktion zu definieren, ermöglicht, die eine variable Anzahl von Parametern gemäß speziellen Anforderungen annehmen kann. Das folgende Beispiel zeigt die Definition einer solchen Funktion.

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

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

Bitte beachten Sie, dass die Funktionfunc () eine letzte schriftliche Argumente Punkte , dass drei Punkte (...),das Argument vor dem Auslassungs immerint ist,die Gesamtzahl der variablen Parameter , die übergeben werden. Um diese Funktion zu nutzen, müssen Siestdarg.h Header - Datei zu verwenden, die die Funktionalität von variablen Parametern bietet Funktionen und Makros zu erreichen.Spezifischen Schritte sind wie folgt:

  • Die Definition einer Funktion, ist der letzte Parameter der Ellipse, ellipsis vor dem Parameter ist immerint, stellt die Anzahl von Parametern.
  • Erstellen Sie eineva_list Typ Variable in der Funktionsdefinition ist diese Art in der Header - Datei stdarg.h definiert.
  • Int - Parameter und Verwendung von Makros va_startva_list Variable als Parameterliste zu initialisieren. Stdarg.h va_start Makro wird in der Header-Datei definiert.
  • Verwenden Sieva_arg Makros und va_listVariablen für jedes Element die Liste der Parameter zuzugreifen.
  • Verwenden Sie ein Makro zu reinigenva_end gegeben va_listVariablenspeicher.

Folgen wir nun die oben genannten Schritte Funktionen mit einer variablen Anzahl von Argumenten zu schreiben und gibt ihre Durchschnitt:

#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));
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es folgendes Ergebnis. Es sollte beachtet werden , dass die FunktionMittelwert () zweimal aufgerufen wird, jedesmal , wenn der erste Parameter die Gesamtzahl repräsentiert sind variable Parameter übertragen.Ellipsen verwendet, um eine variable Anzahl von Argumenten zu liefern.

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