Päivitetty viimeksi 27. heinäkuuta 2020

Todelliset argumentit #

Argumentteja, jotka mainitaan funktiokutsussa, kutsutaan todellisiksi argumenteiksi. Esimerkiksi:

func1(12, 23);

tässä 12 ja 23 ovat todellisia argumentteja.

Todelliset argumentit voivat olla vakioita, muuttujia, lausekkeita jne.

12
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression

Formaaliargumentit #

Argumentteja, jotka mainitaan funktion määritelmässä, kutsutaan formaaliargumenteiksi. Formaalit argumentit ovat hyvin samanlaisia kuin funktion sisällä olevat paikalliset muuttujat. Aivan kuten paikalliset muuttujat, muodolliset argumentit tuhoutuvat, kun funktio päättyy.

1234
int factorial(int n){ // write logic here}

Tässä n on muodollinen argumentti. Muistettavaa todellisista ja muodollisista argumenteista.

  1. Funktiokutsun todellisten argumenttien järjestyksen, lukumäärän ja tyypin on täsmättävä funktion muodollisten argumenttien kanssa.
  2. Jos todellisten ja muodollisten argumenttien välillä on tyyppivirhe, kääntäjä yrittää muuntaa todellisten argumenttien tyypin muodollisiksi argumenteiksi, jos se on laillista, Muussa tapauksessa muodolliseen argumenttiin siirretään roska-arvo.
  3. Formaalissa argumentissa tehdyt muutokset eivät vaikuta todellisiin argumentteihin.

Seuraava ohjelma havainnollistaa tätä käyttäytymistä.

 1 2 3 4 5 6 7 8 910111213141516171819202122232425
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);}

Tässä muuttujan x arvo on 10 ennen kuin funktiota func_1() kutsutaan, func_1() kutsun kutsumisen jälkeen muuttujan x arvo muuttujan main() sisäpuolella main() on edelleen 10. Funktiossa func_1() tehdyt muutokset eivät vaikuta x:n arvoon. Näin tapahtuu, koska kun välitämme arvoja funktioihin, arvosta tehdään kopio ja tämä kopio välitetään muodollisiin argumentteihin. Formaalit argumentit toimivat siis alkuperäisen arvon kopiolla, eivät itse alkuperäisellä arvolla, minkä vuoksi func_1():n sisällä tehdyt muutokset eivät heijastu main():n sisällä. Tämä prosessi tunnetaan argumenttien välittämisenä käyttäen Call by Value -menetelmää, käsittelemme tätä käsitettä yksityiskohtaisemmin tulevissa luvuissa.

Vastaa

Sähköpostiosoitettasi ei julkaista.