C- kielessä muuttujaparametrit toteutetaan osoittimien avulla. Pascalissahan vastaava ilmiö saatiin aikaiseksi VAR-määrittelyllä. C++:ssa on VAR-määrittelyä vastaava viittaustapa muuttujiin: referenssimuuttujat eli viitemuuttujat.
Seuraavassa perinteinen vaihtoesimerkki- ohjelma on kirjoitettuna sekä C:llä että C++:lla:
C- versio ilman referenssimuuttujia:
/* swap.c */ #include <stdio.h> void swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } int main(void) { int x=3, y=4; swap(&x,&y); printf("%d %d\n",x,y); return 0; }C++ -versio referenssimuuttujien avulla:
/* swap.cpp */ #include <stdio.h> void swap(int &a, int &b) { int t; t = a; a = b; b = t; } int main(void) { int x=3, y=4; swap(x,y); printf("%d %d\n",x,y); return 0; }Referenssimuuttujien etuna on siis erityisesti se, että aliohjelma voidaan muuttaa toimimaan joko arvoparametreja käyttäväksi tai muuttujaparametreja käyttäväksi vain muuttamalla aliohjelman prototyypissä muuttujien tyyppiä.
Tosin osoitemuuttujaa käytettäessä kutsuja erityisesti korostaa sitä, että muuttujien arvot tulevat muuttumaan (vrt. swap(&x,&y); tai swap(x,y);)!
Myös seuraava käyttö on mahdollista, mutta sitä ei suositella:
/* REFERENC.CPP */ #include <stdio.h> int main(void) { int i=4; int &p=i; p = 6; printf("i=%d p=%d\n",i,p); // Tulostaa i=6 p=6 return 0; }