Udostępnij za pośrednictwem


Argumenty

Argumenty w wywołaniu funkcji mają postać:

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

W wywołaniu funkcji Lista wyrażeń jest lista wyrażeń (oddzielone przecinkami).Wartości te ostatnie wyrażeń są argumentów przekazanych do funkcji.Jeśli funkcja nie przyjmuje żadnych argumentów, Lista wyrażeń powinien zawierać słowa kluczowego void.

Argument może być wartością z podstawowych, struktury, Unii lub typ wskaźnika.Wszystkie argumenty są przekazywane przez wartość.Oznacza to, że kopia argumentu jest przypisany do odpowiadającego mu parametru.Funkcja nie zna lokalizację pamięci rzeczywistej argumentu przekazanego.Funkcja używa tej kopii, bez wpływania na zmienną, z którego został pierwotnie utworzony.

Chociaż nie można przekazać tablic lub funkcje jako argumenty, można przekazać wskaźniki do tych elementów.Wskaźniki umożliwiają funkcji dostępu wartość poprzez odniesienie do.Ponieważ wskaźnik do zmiennej posiada adres zmiennej, funkcji, można użyć tego adresu do uzyskania dostępu do wartości zmiennej.Wskaźnik argumenty umożliwiają funkcji dostęp do tablic i funkcje, mimo, że funkcje i tablic nie mogą być przekazywane jako argumenty.

Kolejność, w której zostaną obliczone argumenty mogą się różnić w różnych kompilatory i optymalizacji różnych poziomów.Jednakże argumenty i wszelkich skutków ubocznych całkowicie są oceniane przed jest wprowadzana funkcja.Zobacz skutki uboczne Aby uzyskać informacje dotyczące efektów ubocznych.

Lista wyrażeń w funkcji wywołania jest oceniany i zwykłymi arytmetyczne konwersje są wykonywane na każdy argument w wywołaniu funkcji.Jeżeli prototyp jest dostępna, wynikowy typ argumentu jest porównywany z prototypem odpowiedniego parametru.Jeśli nie są zgodne, konwersja jest wykonywana lub wydano komunikat diagnostyczny.Parametry poddawane są również zwykłe konwersje arytmetycznych.

Liczba wyrażeń w Lista wyrażeń musi być zgodny z parametrów, chyba że prototyp funkcji lub definicji jawnie określa zmienną liczbę argumentów.W tym przypadku kompilator sprawdza, czy jako wiele argumentów, ponieważ są nazwy typu na liście parametrów i konwertuje je, jeśli to konieczne, jak opisano powyżej.Zobacz połączeń za pomocą zmiennej liczby argumentów Aby uzyskać więcej informacji.

Jeśli lista parametrów prototyp zawiera tylko słowo kluczowe void, kompilator oczekuje zero argumenty w wywołaniu funkcji i parametry, zero w definicji.Diagnostyczne wiadomości jest wydawany, jeśli znajdzie żadnych argumentów.

Przykład

W tym przykładzie użyto wskaźniki jako argumenty:

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

W tym przykładzie swap funkcja jest zadeklarowana w main ma dwa argumenty, odpowiednio reprezentowana przez identyfikatory num1 i num2, które są wskaźnikami do int wartości.Parametry num1 i num2 w stylu prototyp definicji również są deklarowane jako wskaźniki do int typu wartości.

W wywołaniu funkcji

swap( &x, &y )

adres x jest przechowywany w num1 i adres y jest przechowywany w num2.Obecnie dwie nazwy lub "aliasy" istnieje dla tej samej lokalizacji.References to *num1 and *num2 in swap are effectively references to x and y in main.Przydziały w swap faktycznie wymiany zawartość x i y.W związku z tym, nr return instrukcji jest konieczne.

Kompilator wykonuje sprawdzanie na argumenty typu swap ponieważ prototyp swap zawiera typy argumentów dla każdego parametru.Identyfikatory w nawiasach prototyp i definicji może być taki sam lub inny.Co to jest ważne jest, że typy argumentów zgadzać się z listy parametrów zarówno prototyp, jak i definicji.

Zobacz też

Koncepcje

Wywołania funkcji