Argumenty funkcji

powrót

Argumenty funkcji to dane, które są przekazywane dla funkcji, na podstawie których wykonywane są instrukcje. Np. dla funkcji sumującej dwie liczby rzeczywiste argumentami będą te dwie liczby:

 

double funkcja(double argument1, double argument2)

 

Definiując funkcję, musimy zdefiniować listę argumentów, nadając im typy oddzielając je przecinkami. Gdy definiujemy tylko prototyp funkcji, wystarczy nadać  same nazwy typów:

 

double funkcja(double, double);

 

Pamiętaj, że kolejność argumentów ma znaczenie, tzn. jeśli pierwszym argumentem jest liczba całkowita, a drugim znak, to w takiej kolejności musisz wpisać dane przekazywane dla funkcji:

#include <cstdlib>
#include <iostream>

using namespace std;

void funkcja(double liczba, char znak)
{
	cout<<liczba<<" "<<znak;
}

int main()
{
	double l = 3.14;
	char zn = 'a';

	cout<<"Podałeś następujące wartości argumentów: ";
	
//wywołanie funkcji przekazując dwa argumenty: liczbę "l" i znak "zn"
	funkcja(l, zn); 

	system("PAUSE");
	return EXIT_SUCCESS;
}

 

Ważną rzeczą jest zrozumienie, że w momencie przekazywania zmiennych jako argumenty, funkcja tworzy ich kopie w pamięci. Oznacza to, że wszelkie zmiany na wartościach zmiennych nie będą widoczne w miejscu, gdzie zostały one przekazane do funkcji.

Dla lepszego zobrazowania problemu przeanalizujmy przykład zamiany wartości dwóch zmiennych.

#include <cstdlib>
#include <iostream>

using namespace std;

void zamiana(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	int a, b; //zauważ, że nazwy zmiennych mogą być (ale nie muszą) 
				//takie same jak nazwy argumentów funkcji

	cout<<"Podaj dwie liczby: ";
	cin>>a>>b;
	cout<<"Przed zamianą: a = "<<a<<", b = "<<b<<endl;

	//wywołanie funkcji
	zamiana(a,b);

	cout<<"Po zamianie: a = "<<a<<", b = "<<b<<endl;

	//oczywiście w pierwszym i drugim przypadku zostanie 
	//wyświetlone dokładnie to samo czyli

	//np., gdy podamy a = 9, b = 0
	//to ujżymy komunikat
	//Przed zamianą: a = 9, b = 0
	//Po zamianie: a = 9, b = 0

	system("PAUSE");
	return EXIT_SUCCESS;
}

 

Żeby ominąć ten problem, należy zapoznać się z tym artykułem - referencje.