Freigeben über


Argumente

Die Argumente in einem Funktionsaufruf haben dieses Formular:

expression ( expression-list <SUB>opt</SUB> )  /* Function call */

In einem Funktionsaufruf Liste Ausdruck ist eine Liste von Ausdrücken (durch Trennzeichen getrennt).Die Werte dieser letzten Ausdrücke sind die Argumente, die an die Funktion übergeben werden.Wenn die Funktion keine Argumente akzeptiert, muss das Schlüsselwort Liste Ausdruckvoidenthalten.

Ein Argument kann ein beliebiger Wert mit dem Struktur, Union oder Zeigertyp sein.Alle Argumente werden durch einen Wert übergeben.Dies bedeutet, dass eine Kopie des Arguments in den entsprechenden Parameter zugewiesen wird.Die Funktion hat keine Kenntnis die eigentliche Speicheradresse des übergebenen Arguments.Die Funktion wird diese Kopie, ohne die Variable zu beeinflussen, in der sie ursprünglich abgeleitet wurde.

Obwohl Sie keine Funktionen oder Arrays als Argumente übergeben können, können Sie Zeiger auf diesen Elementen übergeben.Zeiger bieten eine Möglichkeit, eine Funktion einen Wert durch einen Verweis zugreift.Da ein Zeiger auf eine Variable, die Adresse der Variablen enthält, kann die Funktion diese Adresse verwenden, um den Wert der Variablen zugegriffen.Zeiger ermöglichen die Argumente für den Zugriff auf eine bestimmte Funktion von Arrays und - Funktionen, obwohl keine Funktionen und Arrays als Argumente übergeben werden können.

Die Reihenfolge, in der Argumente ausgewertet werden, kann mit anderen Compilern und verschiedene Ebenen Optimierung variieren.Allerdings werden die Argumente und alle Nebeneffekte vollständig ausgewertet, bevor die Funktion aufgerufen wird.Weitere Informationen finden Sie unter Nebeneffekte Informationen über Nebeneffekte.

Die Begriffe Liste in einem Funktionsaufruf wird ausgewertet, und die üblichen arithmetische Konvertierungen sind für jedes Argument im Funktionsaufruf ausgeführt.Wenn ein Prototyp verfügbar ist, wird der resultierende Argumenttyp in den Prototyp des entsprechenden Parameter verglichen.Wenn sie nicht übereinstimmen, wird entweder eine Konvertierung erfolgt oder eine Fehlerdiagnose Meldung wird ausgegeben.Die Parameter können auch die üblichen arithmetische Konvertierungen durch.

Die Anzahl der Ausdrücke in der Liste Ausdruck muss die Number of Parameters übereinstimmen, es sei denn, der die Definition oder den Prototyp Funktion explizit eine variable Anzahl von Argumenten angibt.In diesem Fall überprüft der Compiler so viele Argumente, da es Typnamen in der Liste der Parameter vorhanden ist und bei Bedarf konvertiert, wie oben beschrieben.Weitere Informationen finden Sie unter Aufrufe mit einer variablen Anzahl von Argumenten .

Wenn die Parameterliste des Prototyp nur das Schlüsselwort voidenthält, erwartet der Compiler keine Argumente im Funktionsaufruf Parameter sowie Nullen in der Definition.Eine Diagnosemeldung wird ausgegeben, wenn diese Argumente gesucht werden soll.

Beispiel

In diesem Beispiel wird ein Zeiger als Argumente:

int main()
{
    /* Function prototype */

    void swap( int *num1, int *num2 );
    int x, y;
    .
    .
    .
    swap( &x, &y );  /* Function call */
}

/* Function definition */

void swap( int *num1, int *num2 )
{
    int t;

    t = *num1;
    *num1 = *num2;
    *num2 = t;
}

In diesem Beispiel wird die swap-Funktion in main deklariert, um zwei Argumente verfügen, dargestellt und num1 jeweils von Bezeichnern num2, die Zeiger auf int-Werten werden.Die Parameter num1 und num2 in der Prototyp Format Definition werden auch als Zeiger auf den Typ int-Werten deklariert.

Geben Sie im Funktionsaufruf

swap( &x, &y )

die Adresse von num1 wird in x gespeichert, und die Adresse von y wird in num2gespeichert.Nun befinden sich zwei Namen oder Alias „,“ für denselben Speicherort.Verweise auf *num1 und *num2 in swap sind gewissermaßen Verweise auf x und y in main.Die Zuweisungen in swap tauschen tatsächlich den Inhalt von x und yaus.Daher ist keine return-Anweisung erforderlich.

Der Compiler führt die Typüberprüfung auf den Argumenten an swap aus, da der Prototyp der swap-Argumenttypen für jeden Parameter enthält.Die Bezeichner in Klammern des Prototyp und der Definition können die gleichen oder das unterscheiden.Wie wichtig ist, besteht darin, dass die Typen der Argumente der Parameterlisten im Prototyp als auch in der Definition entsprechen.

Siehe auch

Konzepte

Funktionsaufrufe