logo

Przekazywanie danych do funkcji przez: wartość, wskaźnik i referencję


Temat tego wykłady ilustruje poniższy przykład

#include<cstdlib>
#include<iostream>


using namespace std;



void PrzesunWar(int x, int y,      // ...przez wartość - Błąd! punkt nie będzie przesuniety
                           int dx, int dy)  // ...przez wartość - Ok
{
	x += dx;
	y += dy;
}

void PrzesunWsk(int * x, int * y, // ...przez wskaźnik (adres)
                           int dx, int dy)    // ...przez wartość
{
	*x += dx;    //  *x wyłuskanie wskaźnika (dereferencja)
	*y += dy;    //  *y wyłuskanie wskaźnika (dereferencja)
}

void PrzesunRef(int & x, int & y, // ...przez referencje (adres)
                           int dx, int dy)    // ...przez wartość
{
	x += dx;    //  referencji używa się tak jak zwykłej zmiennej
	y += dy;    //  referencji używa się tak jak zwykłej zmiennej
}


int main(int argc, char *argv[])
{
	int x = 0, y = 0;

	cout << "Przekazywanie przez wartosc" << endl;
	for (int i=0; i<3; ++i)
	{
		PrzesunWar(x, y, 1, 2);
		cout << "(" << x <<", " << y <<")" << endl;
	}

	cout << "\nPrzekazywanie przez wskaznik" << endl;
	x=y=0;
	for (int i=0; i<3; ++i)
	{
		PrzesunWsk(&x, &y, // pobranie adresów zmiennych  x i y
		1, 2);
		cout << "(" << x <<", " << y <<")" << endl;
	}

	cout << "\nPrzekazywanie przez referencje" << endl;
	x=y=0;
	for (int i=0; i<3; ++i)
	{
		PrzesunRef(x, y, 1, 2);
		cout << "(" << x <<", " << y <<")" << endl;
	}

	system("pause");
	return 0;
};

Więcej można znaleźć na stronach:

  1. http://intercon.pl/~sektor/cbx/basics/functions.html
  2. http://darkcult.gamedev.pl/kursy/kurs04.html
  3. http://cc-team.org/index.php?name=artykuly&show=137
  4. http://www.java2s.com/Tutorial/Cpp/0140__Function/Catalog0140__Function.htm

logo