Citat:
RMAN: Ok malo mi je jasnije.
Ima jos nesto sto ne razumem:
const int& max (const int& a, const int& b)
Da li mozete da mi objasnite ulogu & operatora?
Operator & ili referenca služi da bi za već postojeću varijablu uveo novo ime. Npr.:
Code:
#include <iostream.h>
int main()
{
int i, &r = i; // r je referenca na i
i = 10;
cout << i << " " << r; // 10 10
cout << endl;
r = 11;
cout << i << " " << r; // 11 11
return 0;
}
Varijable "i" i "r" su jedno te isto. Ako se baš želiš uvjeriti, provjeri njihove adrese i vidjet ćeš da je to zapravo jedna te ista varijabla.
Isto tako, reference se kao parametri funkcije mogu koristiti kako bi izbjegao pokazivače. Ako si početnik to nikako ne preporučujem jer se lako zabuniti između lokalne varijable funkcije i reference koja može predstavljati neku varijablu u nekoj drugoj funkciji. Stoga, po mom mišljenju je bolje koristiti pokazivače jer vjerujem da ćeš biti puno oprezniji pri pisanju nekog izraza (naredbe) koja sadrži pokazivač nego referencu. Npr.:
Code:
#include <iostream.h>
void f(int& r)
{
r = 10; // pristup preko reference
}
int main()
{
int i;
f(i); // poziv funkcije
cout << i;
return 0;
}
Ako pogledaš funkciju f, u njoj se pristupa varijabli r kao da je riječ o lokalnoj varijabli funkcije. Međutim, ona u ovom konkretnom slučaju je zapravo ništa drugo već varijabla "i" iz funkcije main. Ovdje se vrlo lako zabuniti ako nisi oprezan, a pogotovo ako je riječ o većem broju referenci. Stoga, ovo bi bilo puno "opreznije":
Code:
#include <iostream.h>
void f(int* r)
{
*r = 10; // pristup preko pokazivača
}
int main()
{
int i;
f(&i); // predaja adrese varijable
cout << i; // 10
return 0;
}
E sad... ako pogledaš funkciju f kojom se preko pokazivača mijenja vrijednost odmah bi ti trebalo biti jasno da možda mijenjaš nešto što nije u domeni funkcije f.